java string,string什么意思中文

将乐信息网 http://www.jianglexinxi.cn 2020-04-07 08:22 出处:网络
java string,string什么意思中文,浅析JavaString public final class String implements java.io.Serializable, Comparable String , CharSequence {

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 

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

java string,string什么意思中文

​ 可见,对于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

精彩评论

暂无评论...
验证码 换一张
取 消