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

请问,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一下
------解决方案--------------------
引用:
求解释第一种和第二种的区别




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