请问,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一下
------解决方案--------------------