String a="Hello World!";
String b="Hello World!";
String c=new String("Hello World!");
System.out.println(a==b);  
System.out.println(a==c);
  
Double double1=0D ;
Double double3=0D ;
Double double2=new Double(0) ; System.out.println(double1==double3);
System.out.println(double1==double2);结果是 
true
false
false
false
谁帮解释一下 a==b  是true而double1==double3是FALSE

解决方案 »

  1.   

    System.out.println(a.equals(c));   
    打印true
      

  2.   


    final class Double
    final class String修饰符一样啊 
     什么样有你说的常量池  只有String吗?
      

  3.   

    String 判断时最好的用equals方法, 那个才准。
      

  4.   

    ...具体的是String是对象,它的值在常量池中,由jvm控制~和int等基本类型是不一样的!~
      

  5.   

    Integer也有常量池,好像是-128-127之间吧
      

  6.   

    int和Integer是不一样的= =!~后者是前者的包装类~~
      

  7.   

    System.out.println(double1==double3);
    double1==double3
    比较的是对象引用 两个对象在堆中是两块不同的空间,自然地址是不相同的
    在JVM中源代码中所有相同字面值的字符串常量只可能建立唯一一个拘留字符串对象。
    String a="Hello World!";
    String b="Hello World!";
    代码中局部变量a,b中存储的是地址,但却都是常量池中"Hello world!"指向的堆的唯一的那个拘留字符串对象的地址  
    所以是同一个地址 自然是相等
      

  8.   

    String a="Hello World!";
    String b="Hello World!";
     
    因为a和b引用的是字符常量,它们都存于栈中,值共享。所以都指向同一地址。
    即a==b;  为true.
       
    Double double1=0D ;
    Double double3=0D ;包装类不同于String类型,Double double1=0D ;在后台做了转换即Double double1=new Double(0);
    用new 分配了一个对象,它是堆存储的。 有惟一的地址。所以double1和double3是值相同,但地址不同的
    两个对象。所以double1==double3;为false.