Java数组初始化
1 一维数组初始化
public class ArrayDemo1 {
public static void main(String[] args) {
// 格式一(动态初始化)
int[] arr1 = new int[3]; // 数组的长度(这里为3)必须指定
// 格式二(静态初始化)
int[] arr2 = new int[]{
1, 2, 3}; // 这里数组长度不能指定,花括号里面的元素个数就是数组长度
// 或者按照下面的简写形式
int[] arr3 = {
1, 2, 3}; // 格式二的简写形式
}
}
内存图分析略。
2 二维数组初始化
public class ArrayDemo2 {
public static void main(String[] args) {
// 格式一(动态初始化)
/*int[][] arr = new int[3][2]; System.out.println(arr); // [[I@1b6d3586 System.out.println(arr[0]); // [I@4554617c System.out.println(arr[1]); // [I@74a14482 System.out.println(arr[2]); // [I@1540e19d System.out.println(arr[1][0]); // 0 System.out.println(arr[2][1]); // 0 System.out.println("------------------------"); arr[1][0] = 3; arr[2][1] = 4; System.out.println(arr); // [[I@1b6d3586 System.out.println(arr[0]); // [I@4554617c System.out.println(arr[1]); // [I@74a14482 System.out.println(arr[2]); // [I@1540e19d System.out.println(arr[1][0]); // 3 System.out.println(arr[2][1]); // 4*/
// 格式二(动态初始化)
/*int[][] arr = new int[3][]; System.out.println(arr); // [[I@1b6d3586 System.out.println(arr[0]); // null System.out.println(arr[1]); // null System.out.println(arr[2]); // null // 打印arr相同,都是地址;但是对于arr[0] arr[1] arr[2]结果都是null,因为列的维度没有指定,不知道如何分配内存。 // System.out.println(arr[0][0]); // NullPointerException System.out.println("------------------------"); // arr[1] = {1, 2, 3}; // 报错 arr[1] = new int[]{1, 2, 3}; arr[2] = new int[]{10, 20}; System.out.println(arr[0]); // null System.out.println(arr[1]); // [I@4554617c System.out.println(arr[2]); // [I@74a14482 System.out.println(arr[1][0]); // 1 System.out.println(arr[2][1]); // 20 // 总结:格式二需要new两次,并且Java中二维数组每行元素的个数可以不相同(和C/C++不同)。*/
// 格式三(静态初始化)
// int[][] arr = new int[][]{
{1, 2, 3}, {4, 5}, {6}}; // 此时行、列维度都不能指定
// int[][] arr = new int[2][]{
{1, 2, 3}, {4, 5}}; // 报错
// int[][] arr = new int[][3]{
{1, 2, 3}, {4, 5}}; // 报错
int[][] arr = {
{
1, 2, 3}, {
4, 5}, {
6}}; // 格式三的简化形式
System.out.println(arr); // [[I@1b6d3586
System.out.println(arr[0]); // [I@4554617c
System.out.println(arr[1]); // [I@74a14482
System.out.println(arr[2]); // [I@1540e19d
System.out.println(arr[1][0]); // 4
// System.out.println(arr[2][1]); // ArrayIndexOutOfBoundsException
}
}
格式一内存图分析:
格式二内存图分析:
格式三内存图分析:
总结:数组初始化分为静态初始化和动态初始化,一维数组和二维数组的静态初始化类似;对于动态初始化,一维数组只有一种形式,且必须指定数组的长度,二维数组有两种形式,且必须指定数组的行,列可以不用指定(这种情况要new两次)。
结束语:如果本篇博客对您有帮助,请点赞、收藏或关注,您的鼓励是博主进步的动力,感谢支持,共同进步。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/184301.html原文链接:https://javaforall.cn
原文地址:https://cloud.tencent.com/developer/article/2152856
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。