读书人

请教Java中以上三种定义方式有何不同

发布时间: 2012-12-24 10:43:13 作者: rapoo

请问,Java中以下三种定义方式有何不同之处?
String[] str1=new String[]{
new String("Zhangsan"),
new String("Lisi"),
new String("Wangwu") };

String[] str2={
new String("Zhangsan"),
new String("Lisi"),
new String("Wangwu") };


String[] str3={
"Zhangsan",
"Lisi",
"Wangwu" };

请问:str1, str2, str3 三者的区别是?
[解决办法]
mark 一下 这个我也有点疑问
[解决办法]
只知道简单的变量new的话是放在堆中,没new的是从常量池中找,数组就不太清楚了。
[解决办法]
不要使用String(String)这个构造方法
[解决办法]
str1,str2,str3的内存位置不同
[解决办法]
都一样的,不用想得那么细,就是有不一样,对于以后写程序没有影响的。。。
[解决办法]
求高手回答啊!!!
[解决办法]
我说说我自己的理解。
前两个String[] str1 是申明变量类型和名字 就和 int a 一样 所以习惯把括号跟在String后面。
前两个都是栈里面的一个地址指向推里面的一个数组。
前两个我自己也不是很明白就不乱解释了 我觉得没什么区别。

而第三个没有使用new关键字的 就在常量池中 分配 不会进入堆栈。
[解决办法]
嗯,等下输出看看结果
[解决办法]
这个问题可以归结为使用new跟字符串常量实例化String的区别:
例子:
String str1 = new String();//看见new就分配内存
String str2 = new String("aaa");//分配两个内存,一个new,一个"aaa"
String str3 = "aaa";//不分配内存,指向str2的"aaa"引用

简单说:程序开发不用new关键字,因为每次new都会分配内存,而用常量字符串即使实例化多个相同的"aaa",都是指向同一个内存地址。
[解决办法]
求解释第一种和第二种的区别
[解决办法]
这种太蛋疼了.....
[解决办法]
同问这个问题。。
[解决办法]
等答案 MARK一下
[解决办法]

引用:
求解释第一种和第二种的区别




引用:
嗯,等下输出看看结果



我刚刚仔细研究了下 画了画图 第一组是将那三个元素捆绑在一起 相当于外面包裹了一层放在堆里 第二种则没有 你们自己画画图看看 咱们再讨论讨论
[解决办法]
str1和str2一样,str1和str3的区别和
String s1 = "fuck";
String s2 = new String("fuck");
的区别一样
[解决办法]
对这些问题感兴趣的,可以看看Java虚拟机。
就像C++的,都直接去看内存。

[解决办法]
虽然没有找到答案,但还是谢谢大家的讨论!

读书人网 >J2SE开发

热点推荐