使用javap分析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);
要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:
使用javap分析Java的字符串操作的更多相关文章
- Java的字符串操作一些简单的思考
Java的字符串操作 1 .1不可变的String String对象事不可变的,String类中的每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,以包含修改后的字符 ...
- JAVA作业—字符串操作
------------恢复内容开始------------ ------------恢复内容开始------------ ------------恢复内容开始------------ ------- ...
- Java的字符串操作
目录 Java的字符串操作 一.不同字符串操作的对比 1.1 C++中const修饰指针 const在星号的左边,是被指向的常量不可变 const在星号的右边,是指针的指向不可变 二. Java字符串 ...
- java类库字符串操作
在java类库中,java给我们提供了字符串几个特别的操作,分别是String,Stringbuffer,Stringbuilder等.下面就对这几个类做一个简单的介绍.首先,我们先了解一下Strin ...
- Java Script 字符串操作
JS中常用几种字符串操作: big() small() bold() fontcolor() fontsize() italics() strike() link() charAt() charCod ...
- Java String 字符串操作小结
// 转载加编辑 -- 21 Apr 2014 1. Java字符串中子串的查找 Java中字符串中子串的查找共有四种方法,如下: 1.int indexOf(String str) :返回第一次出现 ...
- 四:Java之字符串操作String、StringBuffer和StringBuilder
string是我们经经常使用到的一个类型,事实上有时候认为敲代码就是在重复的操作字符串,这是C的特点,在java中.jdk非常好的封装了关于字符串的操作.三个类String .StringBuffer ...
- Java基础(一)-- Java对字符串操作大全
一.Java字符串类基本概念 在JAVA语言中,字符串数据实际上由String类所实现的.Java字符串类分为两类:一类是在程序中不会被改变长度的不变字符串:二类是在程序中会被改变长度的可变字符串.J ...
- android TextView字体设置最少占多少行. 及其 Java String 字符串操作 . .
① 字体设置: 修改代码 : GridViewActivity.java priceTv为 TextView priceTv.setMaxLines(3); //当多与7个字fu的时候 , 其余字 ...
随机推荐
- CodeForces Gym 100685E Epic Fail of a Genie (贪心,控制精度)
题意:给定 n 个数,然后让从中选取一些数使得它们的总乘积最大.如果有多个,要求这些数尽量少,如果还有多个,随便输出一组即可. 析:一个贪心题,根据乘法的性质,很容易知道,如果一个数大于1,那么肯定要 ...
- ZOJ3228【AC自动机】
先贡献几个数据(没用别怪我): /* ab 4 0 ab 1 ab 0 ab 1 ab abababac 4 0 aba 1 aba 0 abab 1 abab abcdefghijklmnopqrs ...
- css div平移淡入淡出
<!DOCTYPE html> <html> <head> <style> div { width:100px; height:100px; backg ...
- 洛谷P3306 [SDOI2013]随机数生成器(BSGS)
传送门 感觉我BSGS都白学了……数学渣渣好像没有一道数学题能自己想出来…… 要求$X_{i+1}=aX_i+b\ (mod \ \ p)$ 左右同时加上$\frac{b}{a-1}$,把它变成等比数 ...
- 新装centos 6.5 基本配置
开机自动联网 vi /etc/sysconfig/network-scripts/ifcfg-eth0; 将ONBOOT=no,改为ONBOOT=yes,保存退出 开机直接进入命令行模式 vi /et ...
- java小游戏——猜数字
import java.util.ArrayList; import java.util.List; import java.util.Random; public class Num01 { sta ...
- 1-26HashSet简介
Set的特点 Set里面存储的元素不能重复,没有索引,存取顺序不一致. package com.monkey1024.set; import java.util.HashSet; /** * Set的 ...
- ctypes to load library in c/c++
cdll.LoadLibrary(...) restype (default is c_int) argtypes (what's the default? c_int?) customized da ...
- 一个发散动画的菜单控件(主要记录控件x,y坐标的运动状况)
private void showCloseAnim() { int size = viewList.size(); if (size % 2 == 0) { //是偶数 for (int i = 0 ...
- 《javascript设计模式》笔记之第五章:单体模式
一:单体的基本结构: 最简单的单体,实际就是一个对象字面量: var Singleton = { attribute1: true, attribute2, method1: function() { ...