您现在的位置是:亿华云 > IT科技类资讯
使用javap分析Java的字符串操作
亿华云2025-10-04 17:18:45【IT科技类资讯】0人已围观
简介我们看这样一行简单的字符串赋值操作的Java代码。 String a = "i042416"; 使用命令行将包含了这行代码的Java类反编译
我们看这样一行简单的使用字符串赋值操作的Java代码。
String a = "i042416";
使用命令行将包含了这行代码的字符作Java类反编译查看其字节码:
javap -v constant.ConstantFolding
我们看到字符串 "i042416" 被Java编译器加到了常量池里。
Java代码 String a = "i042416"被翻译成了下面两句字节码:
ldc #16: 首先JVM底层的原生方法StringTable::intern被调用,生成String的使用内部存储实现char[]。然后执行ldc #16,字符作 将常量池内的串操代号为#16的源码库常量加载到栈上,即i042416。使用
2. astore_1:将"i042416"的字符作引用存储到序号为1的本地变量中(即我们代码中的局部变量a)。
下面再看一个稍微复杂一点的串操例子。
做一个字符串拼接的使用操作。
String aa1 = "i042416";
String aa2 = "jerrywang";
String aa3 = "i042416" + "jerrywang";
可以看到,亿华云计算字符作在编译阶段,串操编译器字节把两个字符串常量的使用值进行拼接,结果"i042416jerrywang"存储到变量aa3中,字符作 作为一个新的字符串常量, 在常量池中代号为#21。
因此,变量aa1和aa3实际上指向常量池中的同一个常量,因此直接用==比较也返回true。
String aa1 = "i042416jerrywang";
String aa2 = "jerrywang";
String aa3 = "i042416" + "jerrywang";
System.out.println(aa1 == aa3);
很赞哦!(873)
相关文章
- 用户邮箱的静态密码可能已被钓鱼和同一密码泄露。在没有收到安全警报的情况下,用户在适当的时间内不能更改密码。在此期间,攻击者可以随意输入帐户。启用辅助身份验证后,如果攻击者无法获取移动电话动态密码,他将无法进行身份验证。这样,除非用户的电子邮件密码和手机同时被盗,否则攻击者很难破解用户的邮箱。
- 饿了么容器平台的演进,看这篇文章就够了!
- 阿里大数据架构师总结16道Python面试题!
- Java并发编程包中atomic的实现原理
- 顶级域名可以增加企业品牌的价值。随着经济的快速发展,域名已不再是企业在网络中的独立地位。顶级域名的服务范围、企业产品、综合形象体现等,对于企业单位来说,顶级域名的重要性不言而喻。
- 【WOT2018】大前端时代来临,H5和云端化如何破解开发难题?
- 如何利用DeepFM算法设计推荐系统
- Python 爬取了马蜂窝的出行数据,告诉你这个夏天哪里最值得去!
- 3.dns修改成功后,点击“域名解析”,按提示进行操作。解析格式一般如下:
- Ruby vs Golang:四个维度对比,到底谁更胜一筹?