STRING相关

回过头来补充一个:Java 代码编译生成的类文件中的常量池是静态常量池,当类被载入到虚拟机内部的时候,在内存中产生类的常量池叫运行时常量池。
String a = “a”,是编译期的,在class文件里
String b = “b”,是运行期的,在JVM里。
在这里插入图片描述
A是编译期,B是运行期
转载:https://www.cnblogs.com/javadevelper/p/6067655.html,
https://www.cnblogs.com/xiaoxi/p/6036701.html
1.String对象一旦被创建就是固定不变的了,对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象

2.字符串连接是从左向右依次进行,对于不同的字符串,首先以最左边的字符串为参数创建StringBuilder对象,然后依次对右边进行append操作,最后将StringBuilder对象通过toString()方法转换成String对象(注意:中间的多个字符串常量不会自动拼接)。

也就是说String c = “xx” + "yy " + a + “zz” + “mm” + b; 实质上的实现过程是: String c = new StringBuilder("xxyy ").append(a).append(“zz”).append(“mm”).append(b).toString();

由此得出结论:当使用+进行多个字符串连接时,实际上是产生了一个StringBuilder对象和一个String对象。

String.intern()方法:转载:https://www.cnblogs.com/Kidezyq/p/8040338.html,
https://blog.csdn.net/u013366617/article/details/83618361
这个挺关键的,JAVA1.6和1.7还不一样,转载:https://blog.csdn.net/w605283073/article/details/72753494,
用intern的目的的话,就是创建字符串对象的时候节约内存,具体原理可以看下面美团的技术链接:https://tech.meituan.com/2014/03/06/in-depth-understanding-string-intern.html
这里面:
在这里插入图片描述
这个“11”用的是堆里面堆这个对象

Java中的常量池,实际上分为两种形态:静态常量池和运行时常量池。

1)所谓静态常量池,即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。

2)而运行时常量池,则是jvm虚拟机在完成类装载操作后,将class文件中的常量池载入到内存中,并保存在方法区中,我们常说的常量池,就是指方法区中的运行时常量池。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值