有关java中一维数组初始化问题

来源:百度知道 编辑:UC知道 时间:2024/06/23 03:00:51
1、int[] a=new int[]{1,2,3,4,5};
2、int[] a={1,2,3,4,5};
为什么这两种情况都对?不是只有在new 之后才能分配内存吗?那为什么在第2种情况中只声明了一下就能直接初始化?(主要是不明白第2种),本人刚学,请高手指点!
我想要的正如“依乐聪毓”说的,是内存的状态,不过说的还不够详细,还请知道的详细说一下,感激不尽

我再次强调一下
Java中所有的对象都是在堆中创建的,所以这两种方式是等同的
而不是像“依乐聪毓 ”说的是有在栈中创建的
Java中只有基本数据类型是在栈中创建的,如byte,char,short,int...
第二种方式只是一种语法上的简化,具体可以看Thinking in Java

因此:

可以说这两种方式是等同的,因为数组是一个Array对象

{1,2,3,4,5}这个表达式返回的就是一个new出来的数组
然后用a这个引用变量来进行引用
java中所有创建的对象都是在堆中创建的(也就是说都是new出来的)
所以第二句和第一句没有区别

但是在c++之类的语言中就不同了

ps:
类比一下
String a="hi";
String a= new String("hi");
这两句也可以认为是等同的,原理和上面同样

lz要是有什么不明白的,欢迎发消息给我~

前面各位都没说到点子上,第一行和第二行最主要的区别是:

1. 前者可以在运行时分配存储空间并初始化,并可以运行过程中动态改变这个数组对象,如紧跟一句a = new int[]{1,2};可正常运行,数组长度变为2;

2. 后者只能在第一次初始化时使用,在运行时不能用a = {1,2};的方式重新初始化,否则将产生编译错误。

我觉得没区别
简写了吧 好像是照顾C、C++程序员的习惯

听听其他人高见

第一种是存于堆中的,是创建对象
第二种是存于堆栈当中的,是对象的引用而不是对象

是所有的对象都存于堆中,可是第二种并不是创建对象而是引用对象

后者是一种较常用的省略表示法,以后会熟悉的啦。
初学者很多东西要先记,以后返回来看会有种霍然开朗的感觉,这就是学习