我们看这样一行简单的字符串赋值操作的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);

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

使用javap分析Java的字符串操作相关推荐

  1. 使用javap工具分析Java String(字符串)操作

    Created by Jerry Wang, last modified on Oct 06, 2016 Put this line into class main method: String a ...

  2. 润物无声:java的字符串操作

    说起字符串,真的是一个很容易被忽略(因为随时随地都在用,但是又不难),但是又非常重要.String类是Java中一个比较特殊的类,字符串即String类,它不是Java的基本数据类型之一,但可以像基本 ...

  3. 使用Javap分析Java代码里的static final的工作原理

    Created by Jerry Wang, last modified on Oct 05, 2016 I have written the following test code: I would ...

  4. java 字符串常用函数_Java学习笔记35:Java常用字符串操作函数

    package com.xxx.controller.api; import org.apache.commons.lang.StringUtils; public class Test { publ ...

  5. eclipse中使用javap分析java代码备忘

    在run中打开external tools configurations,配置如下运行就行. 转载于:https://www.cnblogs.com/mapleyuan/archive/2013/04 ...

  6. java字符串操作_Java的字符串操作

    Java的字符串操作 小型送分题:Java有字符串(String),StringBuffer(字符串缓存),StringBuilder(字符串建造者?)各种实现,究其原因还是历史上的各种坑. 一.不同 ...

  7. java 字符串过长_idea java常量字符串过长解决办法

    1.情景展示 如上图所示,在idea中,运行报错:常量字符串过长. 2.原因分析 java常量字符串,允许的最大长度仅为65534.归根结底是javac的问题,本身和idea没关系,但也不是一点关系没 ...

  8. swift和java_Swift和Java关于字符串和字符的比较

    1. 字符串字面量 Swift和Java关于字符串操作大同小异. Swift:字符串字面量(String Literals):我们可以在代码中包含一段预定义的字符串值作为字符串字面量. 字符串字面量是 ...

  9. Java 程序优化:字符串操作、基本运算方法等优化策略

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 字符串操作优化 字符串对象 字符串对象 ...

最新文章

  1. Win8Metro(C#)数字图像处理--2.3图像反色
  2. SDUT_2121数据结构实验之链表六:有序链表的建立 (对建立的单项链表结构进行排序)
  3. Leetcode5633. 计算力扣银行的钱[C++题解]:模拟简单
  4. phoenix 3.1 + hbase 0.94.21 的安装和使用
  5. java lambda例子_Java lambda 表达式常用示例
  6. 找出一个字符串中出现次数最多的字_Day34:第一个只出现一次的字符
  7. 38、JAVA_WEB开发基础之下载功能
  8. 快速搭建springmvc+spring data jpa工程
  9. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:概述
  10. java hibernate方言_java – 如何在运行时获取Hibernate方言
  11. spring boot连接redis配置127.0.0.1_Java技术分享——Springboot整合redis
  12. QTP11的下载地址和破解教程
  13. 自由软件之父Richard Stallman及其思想
  14. python加密狗的制作_制作u盘加密狗
  15. 电脑被格式化后数据还能恢复吗【图文】
  16. Android 仿微信录制短视频(不使用 FFmpeg)
  17. java静态代码块和实例代码块
  18. Linux上使用docker运行酷Q机器人
  19. 昂达vi40精英版刷Linux,昂达VI40双核版刷机教程
  20. 基于java+ssm+vue的校园卡一卡通饭卡管理系统

热门文章

  1. SAP UI5 的 TypeScript 实践
  2. ABAP Netweaver 和 ABAP Platform 这两个名词的辨析
  3. Rxjs of() 和 of({}) 的区别
  4. 在 SAP 电商云 Spartacus UI 里手动注入 module 的几种排列组合
  5. ts-node 学习笔记 - 如何解决在 Windows10 下不能直接运行 ts-node 的问题
  6. SAP Spartacus SimpleResponsiveBannerComponent url 的数据源
  7. Angular 项目里和 sourceMap 相关的设置
  8. SAP Spartacus 如何获得当前渲染页面的 CMS 元数据
  9. SAP Fiori Elements 应用 manifest.json 文件里 resources.json 的含义
  10. Kitten编程猫 里的克隆体无法进行边缘检测