public class datetype{
public static void main(String args[]){
int i=Integer.parseInt("42");
long l=42;
double d=42.0;
String s="42";
if(i==l)
System.out.println("i == l");
else if(i==d)
System.out.println("i==d");
else if(l==i)
System.out.println("l==i");
else if(d==i)
System.out.println("d==i");
else if(s.equals(i))
System.out.println("s==i");
else if(s.equals(d))
System.out.println("s==d");
else if(s.equals(l))
System.out.println("s==l");
else
System.out.println("no");
}
}说说这个程序的运行结果,然后加一点点解释,为什么是这样的结果,谢谢各位了!!!

解决方案 »

  1.   

    ==是比较2个对象的内存地址,而equals是比较2个对象的内容!
      

  2.   

    == 比较是否指向同一个对象
    equals 比较值是否相等
      

  3.   

    ==基本类型比较的是值,引用类型比较的是地址
    String的equals比较的是内容
      

  4.   

    ==:比较的是地址
    equals:这个是String类的方法,比较的是内容!
      

  5.   

    LZ的代码的输出结果应该是:i == l,但这不能说明其他的if语句里的值都为false,只是因为第一个if的值为true,下面的if语句就被忽略而不被执行,其实前四个if语句的值都为true,即如果不是因为第一个if语句为true而被忽略的话都会被执行这一点LZ可以通过分别注释掉每一个if语句来验证;i,l,d的值在栈内存中的地址是一样的,而他们在堆内存的值趋势不一样的,如下图所示:
    == 比较引用地址equals 比较的是内容是否一样
    for example:String str1 = "abc";//
    String str2 = "abc";
    String str3 = new String("abc");str1 == str2; //true
    str1 == str3; //false
    str1.equals(str2); //true
    str1.equals(str3); //true
      

  6.   


    内存分析见这里:http://hi.csdn.net/space-2552431-do-album-picid-426230.html
      

  7.   

    public class datetype{ 
    public static void main(String args[]){ 
    int i=Integer.parseInt("42"); 
    long l=42; 
    double d=42.0; 
    String s="42";
    String str=new String("42"); 
    if(i==l) 
      System.out.println("i==l");
    else System.out.println("no");    
    if(i==d) 
     System.out.println("i==d");
    else System.out.println("no");  
    if(l==i) 
     System.out.println("l==i");
    else System.out.println("no");   
    if(d==i) 
     System.out.println("d==i");
    else System.out.println("no");
       
    if(s.equals(i)) 
     System.out.println("s==i");
    else System.out.println("no");   
    if(s.equals(d)) 
     System.out.println("s.equals(d)");
    else System.out.println("no");  
    if(s.equals(l)) 
     System.out.println("s.equals(l)"); 
    else System.out.println("no");
    if(s.equals(str)) 
     System.out.println("s.equals(str)"); 
    else System.out.println("no"); 
    if(s==str) 
     System.out.println("s==str"); 
    else System.out.println("no");

    } 代码重新弄了下,运行结果如下:i==l
                              i==d
                              l==i
                              d==i
                              no
                              no
                              no
                              s.equals(str)
                              no
    分析如1楼