java关于二维数组分配空间
供稿:hz-xin.com 日期:2025-01-16
java中二维数组动态分配内存问题(初学者)
2.两种分配方式其实是相同的,都是先开辟内存空间,然后赋值。区别有两点,一是在于何时赋值,第一种方式编程者没给赋值,但系统会默认赋值(默认值根据数据类型不同,赋的值也不同一般整形赋值0,浮点型赋值0.0),第二种是边分配边赋值。第二点区别是数组维数上的设定:int s[][]=new int[3][4];只要这样写,那么你数组的维数就确定了,他是一个3行4列的数组(注意,3行中每一行都有4个元素)。如果写成这样:int s [][]={{1,2},{3,4,5},{6,7,8,9}};那它就是一个3行X列的数组,X表示2、3、4,也就是说第1行有两个元素,第2行3个,第3行4个,不是规则的3行4列的了。
关于这两种方式输出结果,你第一种分析的正确。第二种形式,根据我上面说的,下面这四个输出你应该能理解:
System.out.println(s.length);//输出3
System.out.println(s[0].length);//输出2
System.out.println(s[1].length);//输出3
System.out.println(s[2].length);//输出4
下面分析下面的三行代码:
System.out.println(s[0][2]);//这句报错,溢出
这句的意思是输出第0行的第3个元素(没错,是滴3个元素,因为数组是从第0个元素开始的,所以2代表第3个元素),由于第0行只有2个元素,所以你这句有错。
System.out.println(s[1][2]);//这句是5
这句话是打印出第2行的第3个元素,确实是5
System.out.println(s[1][3]);]);//这句同样报错,溢出
这句话是打印出第2行的第4个元素,当然溢出了。
其实,我觉得一楼把代码改成下面这个,提问者更能理解:
public class Test {
/**
* @param args
*/
public static void main(String[] args)
{
int a[][]=new int[5][];
for(int i=0;i<a.length;i++)
{
a[i]=new int[i+1];//动态生成一维数组-----只改了这行
}
}
}
java里面的二维数组,不是一个矩形的。。二维数组可以看成是一个一维数组,但是数组的元素也是一维数组。。且各个数组元素的大小可以不同
您好,提问者:
数组分为:基本数据类型数组、对象数组类型数组。
比如:String[] arr = new String[3] ; //String就是一个对象。
你这样是正确的,这个数组存放的是Student对象,开辟了4个空间。
2.两种分配方式其实是相同的,都是先开辟内存空间,然后赋值。区别有两点,一是在于何时赋值,第一种方式编程者没给赋值,但系统会默认赋值(默认值根据数据类型不同,赋的值也不同一般整形赋值0,浮点型赋值0.0),第二种是边分配边赋值。第二点区别是数组维数上的设定:int s[][]=new int[3][4];只要这样写,那么你数组的维数就确定了,他是一个3行4列的数组(注意,3行中每一行都有4个元素)。如果写成这样:int s [][]={{1,2},{3,4,5},{6,7,8,9}};那它就是一个3行X列的数组,X表示2、3、4,也就是说第1行有两个元素,第2行3个,第3行4个,不是规则的3行4列的了。
关于这两种方式输出结果,你第一种分析的正确。第二种形式,根据我上面说的,下面这四个输出你应该能理解:
System.out.println(s.length);//输出3
System.out.println(s[0].length);//输出2
System.out.println(s[1].length);//输出3
System.out.println(s[2].length);//输出4
下面分析下面的三行代码:
System.out.println(s[0][2]);//这句报错,溢出
这句的意思是输出第0行的第3个元素(没错,是滴3个元素,因为数组是从第0个元素开始的,所以2代表第3个元素),由于第0行只有2个元素,所以你这句有错。
System.out.println(s[1][2]);//这句是5
这句话是打印出第2行的第3个元素,确实是5
System.out.println(s[1][3]);]);//这句同样报错,溢出
这句话是打印出第2行的第4个元素,当然溢出了。