java的string是什么意思,java string,string什么意思中文

java string,string什么意思中文,浅析Java String

public final class String

implements java.io.Serializable, Comparable String , CharSequence {

/** The value is used for character storage. */

private final char value[];

/** Cache the hash code for the string */

private int hash; // Default to 0

/** use serialVersionUID from JDK 1.0.2 for interoperability */

private static final long serialVersionUID = -6849794470754667710L;

private static final ObjectStreamField[] serialPersistentFields =

new ObjectStreamField[0];

​ 可以看出,String是一个final类,也就意味着他不可以被继承,而且其内部成员变量是private修饰,方法也是final修饰,同样也就意味着他的成员变量不会直接暴露给用户,方法不可以被重写。这样实现了方法不可变(不能重写),变量不能变,比如private final char value[];这里就是string字符串不能变的实现。

​ 字符串不可变底层实现分析:

​ 当运行如下代码的时候:

String s1 = Java

String s2 = Hello

String s5 = s1;

s5 = change

String s3 = new String( Hello

String s4 = new String( Java

​ 字符串常量在虚拟机内存空间的情况如图所示:

c3843a4e18e37045d5fb1ee12e6022a0.png

​ 可见,对于String s1 = Java 这种字面量赋值的形式,会直接在常量池中开辟一个空间用于存储相应的字符串(前提是常量池中还没有该字符串),而String s3 = new String( Hello )这样的,会先在堆中创建对象,然后再去常量池中找是否有需要的字符常量,如果有,则直接使用,如果没有,也同样需要开辟新的空间来存储。

​ 重点看 :

String s1 = Java

String s5 = s1;

s5 = change

​ 当执行String s5 = s1时,s5会直接去使用s1在常量池中的内容,而后面当执行s5 = change 的时候,也就是说需要对Java这个字符串进行修改,可是这个字符串除了s5自己使用外,s1也在使用,所以就不能直接修改他,而是要在空间中重新开辟一个空间,用于存储change。这就是字符串不可以直接修改的底层实现!

​ 字符串设置为不可变的原因:

​ ①出于安全考虑,程序在运行之前虚拟机会把字符常量,静态变量等预加载到常量池(方法区) 中存储起来,在程序运行的时候直接调用,但是常量池里面的信息不会有重复的,每一个都是 唯一的(这样是为了减少内存的开销,提升性能),这些信息是线程共享的,同一个字符串可 能会被多个线程使用,如果字符串可变,当某个线程修对他做了修改,其他正在使用该字符串 的线程可能就会出现严重的错误,从而变得不安全。

​ ②保证hash值不会经常变动,具有唯一性,使得类似HashMap的容器能实现key—value的功能

java string的相关网页热门搜索词

string api|stringfactory|string char|math.round|Scanner|csdn官网|string什么意思中文|jdk|format|

本文标题:java string,string什么意思中文

http://www.jianglexinxi.cn/yanergaozhi/345272.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值