博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于"a"+"b"共创建了几个对象的问题
阅读量:7128 次
发布时间:2019-06-28

本文共 933 字,大约阅读时间需要 3 分钟。

首先,我们先看下以下代码的输出情况

String s = "a" + "b";System.out.println(s == "ab"); //  true

将这段代码反编译后得到如下结果

public static void main(java.lang.String[]);    Code:       0: aload_0       1: invokespecial #1                  // Method java/lang/Object."
":()V 4: return public static void main(java.lang.String[]); Code: 0: ldc #2 // String ab 2: astore_1 3: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream; 6: aload_1 7: ldc #2 // String ab 9: if_acmpne 16 12: iconst_1 13: goto 17 16: iconst_0 17: invokevirtual #4 // Method java/io/PrintStream.println:(Z)V 20: return

重点是这句0: ldc #2 // String ab,可以发现 从一开始"a"+"b"就是一个整体,这是因为jvm在编译时就去掉其中的加号,直接将其编译成一个相连的结果存入了常量池,而不是等到运行时再去进行相加,所以运行s=="ab"结果为true;

结论:
String s = "a" + "b";只创建了一个对象,就是ab,存于常量池中。

转载地址:http://koael.baihongyu.com/

你可能感兴趣的文章
Oracle DG之--构建Physical Standby(一主库对应多备库)
查看>>
深入学习 Hyper-V 的导出和导入
查看>>
为迎接祖国60华诞,更换博客页面了!!!
查看>>
基于OHCI的USB主机 —— USB设备去的配置描述符
查看>>
IO Foundation 6-解压缩zip文件
查看>>
收件人管理及活动目录集成
查看>>
几个常用的dos命令
查看>>
多态的概念
查看>>
个人笔记:LINUX下MAIL通知维护
查看>>
Azure国际版VM密码重置(Portal)
查看>>
libvirt kvm云主机监控
查看>>
Apache配置静态缓存
查看>>
URL欺骗
查看>>
Zabbix图像集中展示Graphtrees开源
查看>>
《聚爆Implosion》性能精析:这是我们测过性能最棒的手游,没有之一!
查看>>
Linux GPT分区格式磁盘的相关操作
查看>>
DCD DSR DTR RTS CTS 的含义
查看>>
OpenTest:教你在自动化脚本中增加选择文件的支持
查看>>
关于安装ASPNetExtMVC2008.exe 后不出现MVC项目的问题
查看>>
强烈推荐ISCSI target和initiator软件
查看>>