String str="hello" 于 String str=new String("hello") 有什么不同,产生的效果各是怎么样?

解决方案 »

  1.   

    String str="hello"
    是将str指向了String类实例池中的常量"hello"(Java考虑到效率问题专门维持了一个String的实例池)
    String str=new String("hello") 
    是new了一个实实在在的String对象,它的值为"hello"
      

  2.   

    大家看看这段代码,可能会有帮助class EqualsTest{
      public static void main(String[] arguments){
        String str1, str2;
        str1 = "Free the bound periodicals.";
        str2 = str1;    //值相等,且为同一个对象
        System.out.println("String1: " + str1);
        System.out.println("String2: " + str2);
        System.out.println("Same object? " + (str1 == str2));   //通过“==”运算符可以判断两个“对象”是否相同
        System.out.println("Same value? " + str1.equals(str2));    str1 = "Free the bound periodicals.";
        str2 = new String(str1);    //值相等,但非同一个对象
        System.out.println("\nString1: " + str1);
        System.out.println("String2: " + str2);
        System.out.println("Same object? " + (str1 == str2));
        System.out.println("Same value? " + str1.equals(str2));    str1 = "Free the bound periodicals.";
        str2 = str1;
        str1 = "I'v changed it.";   //并非修改str1的值。看似修改str1的值,其实是创建一个新对象,然后修改str1的引用    //不同值,不同对象
        System.out.println("\nString1: " + str1);
        System.out.println("String2: " + str2);
        System.out.println("Same object? " + (str1 == str2));
        System.out.println("Same value? " + str1.equals(str2));
      }
    }
      

  3.   

    String str = new String("hello")
    是创建一个"hello"字符串对象的副本
      

  4.   

    String str="hello"
    是将str指向了String类实例池中的常量"hello"(Java考虑到效率问题专门维持了一个String的实例池)String str=new String("hello") 
    是new了一个实实在在的String对象,它的值为"hello"
    str 只是一个指向"hello"的引用
      

  5.   

    大家看看这段代码,可能会有帮助class EqualsTest{
      public static void main(String[] arguments){
        String str1, str2;
        str1 = "Free the bound periodicals.";
        str2 = str1;    //值相等,且为同一个对象
        System.out.println("String1: " + str1);
        System.out.println("String2: " + str2);
        System.out.println("Same object? " + (str1 == str2));   //通过“==”运算符可以判断两个“对象”是否相同
        System.out.println("Same value? " + str1.equals(str2));    str1 = "Free the bound periodicals.";
        str2 = new String(str1);    //值相等,但非同一个对象
        System.out.println("\nString1: " + str1);
        System.out.println("String2: " + str2);
        System.out.println("Same object? " + (str1 == str2));
        System.out.println("Same value? " + str1.equals(str2));    str1 = "Free the bound periodicals.";
        str2 = str1;
        str1 = "I'v changed it.";   //并非修改str1的值。看似修改str1的值,其实是创建一个新对象,然后修改str1的引用    //不同值,不同对象
        System.out.println("\nString1: " + str1);
        System.out.println("String2: " + str2);
        System.out.println("Same object? " + (str1 == str2));
        System.out.println("Same value? " + str1.equals(str2));
      }
    }他问的不是这个
    你说明的是引用的不同