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 三者的区别是?

解决方案 »

  1.   

    只知道简单的变量new的话是放在堆中,没new的是从常量池中找,数组就不太清楚了。
      

  2.   

    不要使用String(String)这个构造方法
      

  3.   

    str1,str2,str3的内存位置不同
      

  4.   

    我说说我自己的理解。
    前两个String[] str1 是申明变量类型和名字 就和 int a 一样 所以习惯把括号跟在String后面。
    前两个都是栈里面的一个地址指向推里面的一个数组。
    前两个我自己也不是很明白就不乱解释了 我觉得没什么区别。而第三个没有使用new关键字的 就在常量池中 分配 不会进入堆栈。
      

  5.   

    这个问题可以归结为使用new跟字符串常量实例化String的区别:
    例子:
    String str1 = new String();//看见new就分配内存
    String str2 = new String("aaa");//分配两个内存,一个new,一个"aaa"
    String str3 = "aaa";//不分配内存,指向str2的"aaa"引用简单说:程序开发不用new关键字,因为每次new都会分配内存,而用常量字符串即使实例化多个相同的"aaa",都是指向同一个内存地址。
      

  6.   

    str1和str2一样,str1和str3的区别和
    String s1 = "fuck";
    String s2 = new String("fuck");
    的区别一样
      

  7.   

    对这些问题感兴趣的,可以看看Java虚拟机。
    就像C++的,都直接去看内存。