这个问题百度上有很多答案

有一次面试的时候,面试官也提到了这个问题。我回答了两个对象,并且解释了一个对象是 “123” 存在了字符串常量池,另一个是 s 所引用的堆中的对象。

但是面试官忽然来了一句,让我佐证一下。

我当时有点不知所措,又是扯hashcode,又是扯堆栈,感觉自己都没有回答出问题的关键。

不过现在我已经知道了

public class Test {
public static void main(String[] args) {
String s="123";
String s2=new String("123");
String intern = s2.intern();
System.out.println(intern==s);//true
System.out.println(s2==s);//false
}
}

s2.intern 会返回字符串常量池中 等于堆中s值的引用 ,及s

所以intern是等于s的


--更新2019-10-5
##java果然是越学越多,感觉自己就是个废物。
上面这个问题 其实就了更好的办法
先贴代码
```
public class Test {
public static void main(String[] args) {
String ss=new String("123");
}
}
```
然后查看下编译好的class文件就ok了,我用的是idea的jclasslib插件
如图
![](https://img2018.cnblogs.com/blog/1782870/201910/1782870-20191005140311234-56254684.png)
可以看到main方法被编译成了以下字节码
```
0 new #2 //new 创建对象 放在堆中
3 dup //dup 把new出来的对象的引用放入栈,这么是因为后面invokespecial 需要这个引用 去初始化,如果不入栈就找不到这个引用了。
4 ldc #3 //Push item from run-time constant pool 放入运行常量池
6 invokespecial #4 > //初始化上面dup压入栈的引用 这里就是String
9 astore_1 //Store reference into local variable
10 return
```
可以很清楚的看到 一个在堆,一个常量池

最新文章

  1. Extjs 学习总结-代理
  2. VS2013使用EF6连接MySql
  3. emberjs初学记要
  4. rtc关机闹钟4 AlarmManagerService.java
  5. Centos 6.5 安装 chrome , mplayer , alarm , clock
  6. read op case $op in
  7. 获取调用者Class和method、反射获取get方法、获取注解信息
  8. Redis 中文入库成功,读取数据写入文件乱码问题
  9. Debian8 安装wordpress博客
  10. html日历(3)
  11. (9/24) 图片跳坑大战--css分离与图片路径处理
  12. 容器(Container)Frames和Panels
  13. 2013-7-27 802.1X学习
  14. svn 创建tag
  15. 第二阶段Sprint冲刺会议5
  16. 获取字符串中某个指定的子串出现的开始位置(CHARINDEX用法)
  17. 微信开发,调用js-SDK接口
  18. django cookie and session
  19. bad ELF interpreter
  20. mac git 命令自动补全

热门文章

  1. (七十四)c#Winform自定义控件-金字塔图表
  2. jenkins之插件下载方法
  3. 验证fstab文件修改是否正确
  4. asp.net core IdentityServer4 实现 resource owner password credentials(密码凭证)
  5. 标准io和管道练习
  6. Android Studio [Toast]
  7. python打开文件查询字符串时报UnicodeDecodeError: 'gbk' codec can't decode byte 0xaa in position 19: illegal multibyte sequence错误
  8. ps 将图片四角变成圆角
  9. Git基础概念与Flow流程介绍
  10. 判断日期是否为法定节假日的API接口与示例函数