public class HeapStackTest {

public static void main(String[] args){
String str1 = new String("abc");
String str2 = "abc";
String str3 = "abc";

System.out.println(str1 == str2);
System.out.println(str2 == str3);

int a = 5;
Integer b = new Integer(5);
Integer c = new Integer(5);
System.out.println(a == b);
System.out.println(b == c);

}
}新手上路,想请教各位,以上程序,输出的true或false在堆栈中是如何实现的?
以上出现的数据在堆栈中是如何保存的呢?
“==”比较的是什么?
若全换成equals呢?

解决方案 »

  1.   

    对于引用类型,==两侧比较的是内存地址,因为str2和str3都指向字符串池中的abc 所以它们的内存地址是相同,输出的应该是true;
    对于简单类型,==两侧比较的是数值;
      

  2.   

    嗯,有道理!可是对基本类型和引用类型的比较呢?
    比如上面的:
    int a = 5; 
    Integer b = new Integer(5); 
    System.out.println(a == b);又是个什么情况呢?
      

  3.   


    我也是这么想的呢!可是实际运行的时候打印出来的是true……
    这是为什么?
      

  4.   

    你使用的jdk版本是1.5或者更高吧,在1.4中上面的语句编译都通不过,在1.5以后Java支持基本类型包装类的自动装箱/拆箱,我想就是因为这个原因才使结果为true.
      

  5.   


    呵呵,有道理哦!我用的是JDK1.6,基本类型包装类的自动装箱/拆箱,学习了!
      

  6.   

    对于引用类型, ==两侧比较的是内存地址
    对于简单类型, ==两侧比较的是数值
    equals比较的是值1.简单类型比较,用==
    2.对象与null比较一般用==
    3.引用类型比较一般用equals
      

  7.   


    int 与 Integer比较
    Integer 两类型不同,Integer自动解箱为int类型 因而两种类型比较为trueInteger 与 Integer 比较
    Integer则不存在自动解箱,两者比较为false
      

  8.   


    int 与 Integer比较 
    Integer 两类型不同,Integer自动解箱为int类型 因而两种类型比较为true 学习了!