日期:2014-05-20  浏览次数:20764 次

String数组初始化
String[] str = {"1","2","3"} 
与String[] str = new String[]{"1","2","3"}在内存里有什么区别?

------解决方案--------------------
String[] str = {"1","2","3"} 
内存中是静态初始化
String[] str = new String[]{"1","2","3"}
则是动态分配内存

------解决方案--------------------
Java code
1\Test.class
1\Test.java
2\Test.class
2\Test.java
3\Test.class
3\Test.java
4\Test.class
4\Test.java

------解决方案--------------------
编译执行结果没有任何区别。
更不可能像有些人想当然说的在栈上分配空间,Java的对象都是在堆上分配空间的。

这里的区别仅仅是代码书写上的:
String[] str = {"1","2","3"}; 这种形式叫数组初始化式(Array Initializer),只能用在声明同时赋值的情况下。
而 String[] str = new String[]{"1","2","3"} 是一般形式的赋值,=号的右边叫数组字面量(Array Literal),数组字面量可以用在任何需要一个数组的地方(类型兼容的情况下)。如:

String[] str = {"1","2","3"}; // 正确的

String[] str = new String[]{"1","2","3"} // 也是正确的



String[] str;
str = {"1","2","3"}; // 编译错误

因为数组初始化式只能用于声明同时赋值的情况下。

改为:

String[] str;
str = new String[] {"1","2","3"}; // 正确了

又如:

void f(String[] str) {
}

f({"1","2","3"}); // 编译错误

正确的应该是:

f(new String[] {"1","2","3"});

从回帖看,太多人忽视这些基础知识的学习了。