使用javap分析Java的字符串操作

简介: 使用javap分析Java的字符串操作

我们看这样一行简单的字符串赋值操作的Java代码。

String a = “i042416”;

使用命令行将包含了这行代码的Java类反编译查看其字节码:

javap -v constant.ConstantFolding

image.png

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。

image.png

因此,变量aa1和aa3实际上指向常量池中的同一个常量,因此直接用==比较也返回true。


String aa1 = “i042416jerrywang”;


String aa2 = “jerrywang”;


String aa3 = “i042416” + “jerrywang”;


System.out.println(aa1 == aa3);

image.png


相关文章
|
存储 Java C++
JVM、Java编译器和Java解释器
JVM、Java编译器和Java解释器 java解释器就是把在java虚拟机上运行的目标代码(字节码)解释成为具体平台的机器码的程序。即jdk或jre目录下bin目录中的java.exe文件,而javac.exe是编译器。
1252 0
|
5月前
|
Java Windows
查看java文件汇编代码与字节码
查看java文件汇编代码与字节码
50 0
|
5月前
|
Java C++
【Java练习题】Java程序的输出 | 第三套(含解析)
【Java练习题】Java程序的输出 | 第三套(含解析)
35 0
|
5月前
|
Java 编译器 C++
【Java练习题】Java程序的输出 | 第四套(含解析)
【Java练习题】Java程序的输出 | 第四套(含解析)
33 0
|
12月前
|
Java
【java筑基】实战java基本数据类型与字符串操作
【java筑基】实战java基本数据类型与字符串操作
|
安全
JAVA5种字符串拼接
JAVA5种字符串拼接
76 0
|
Java 编译器 C语言
java为什么是一次编译,多次解释
本文详细解释java为什么是一次编译,多次解释。
180 0
java为什么是一次编译,多次解释
|
Java Go C语言
【Java】C语言里叫【函数】,Java里叫【方法】——一文讲清楚Java里的“函数“——方法(一)
前言 咱们在C语言里肯定都学过函数吧,相信大家对函数的理解已经很深刻了,因为函数在C里用的会很多,特别是做项目的时候,会分模块来写,Java里同样为大家提供了“函数”,只不过叫法不一样,Java里叫【方法】,接下来请往下看
|
Java C语言
【Java】C语言里叫【函数】,Java里叫【方法】——一文讲清楚Java里的“函数“——方法(三)
前言 咱们在C语言里肯定都学过函数吧,相信大家对函数的理解已经很深刻了,因为函数在C里用的会很多,特别是做项目的时候,会分模块来写,Java里同样为大家提供了“函数”,只不过叫法不一样,Java里叫【方法】,接下来请往下看
【Java】C语言里叫【函数】,Java里叫【方法】——一文讲清楚Java里的“函数“——方法(三)
|
Java C语言
【Java】C语言里叫【函数】,Java里叫【方法】——一文讲清楚Java里的“函数“——方法(二)
前言 咱们在C语言里肯定都学过函数吧,相信大家对函数的理解已经很深刻了,因为函数在C里用的会很多,特别是做项目的时候,会分模块来写,Java里同样为大家提供了“函数”,只不过叫法不一样,Java里叫【方法】,接下来请往下看
【Java】C语言里叫【函数】,Java里叫【方法】——一文讲清楚Java里的“函数“——方法(二)