Java基础对象引用

    String n1 = "hello";
    String n2 = "hello";
    System.out.println(n1 == n2);
输出结果是true,栈中有两个对象的引用,分别指向堆中的两个对象,两个对象的内存地址应该是不一样的吧,为什么打印结果是true呢!?
阅读 1.8k
3 个回答

n1和n2指向的是常量池的同一个对象hello
图片描述

字节码指令都是使用ldc将String型常量值从常量池中推送至栈顶
图片描述

对于基础数据类型而言.
== 是比较的变量的值.
equals 比较的是内存地址.

对于引用类来说
==和equals比较的是对象的内存地址.

hello在第一次建立 就被放入 常量池 两次对象引用指向的是同一个地址,所以 true

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题