public class AA{
public static void main( String args[] ){
String s1 = new String( "Hello" );
String s2 = new String( "Hello" );
if( s1 == s2 ) System.out.println( "s1=s2" );

String ss1 = new String( "Hello" );
String ss2 = ss1;
if( ss1 == ss2 ) System.out.println( "ss1=ss2" );

String sa1 = new String( "Hello" );
String sa2 = new String( sa1 );
if( sa1 == sa2 ) System.out.println( "sa1=sa2" );
}
}输出结果是 ss1 = ss2
请问String ss2 = ss1;与String sa2 = new String( sa1 );有什么区别?清高手们赐教

解决方案 »

  1.   

    区别就在于:
    String ss2 = ss1使得ss1和ss2指向同一个"Hello",而String sa2 = new String( sa1 );由于你使用了new,sa1和sa2指向不同的"Hello","=="不成立
      

  2.   


    public class AA{ 
    public static void main( String args[] ){ 
    String s1 = new String( "Hello" ); 
    String s2 = new String( "Hello" ); 
    if( s1 == s2 ) System.out.println( "s1=s2" ); 
    //上面行的s1和s2是两个不同的对象,s1 == s2 返回的是false,如果用s1.equals(s2)的话就返回true,String ss1 = new String( "Hello" ); 
    String ss2 = ss1; 
    if( ss1 == ss2 ) System.out.println( "ss1=ss2" ); 
    //上面行的s1和s2是同一个对象,当然它们==了,所以打印这行String sa1 = new String( "Hello" ); 
    String sa2 = new String( sa1 ); 
    if( sa1 == sa2 ) System.out.println( "sa1=sa2" ); 
    //sa2 = new String( sa1 ); 注意这里你用了new关键字,说明它也是一个新的对象,不同的对象,它的引用(地址)肯定不同,所以不==


    String ss2 = ss1;与String sa2 = new String( sa1 );的区别:String ss2 = ss1;让ss2和ss1指向同一个对象
    String sa2 = new String( sa1 );重新new一个对象,把这个新new出来的对象复制给sa2