JAVA中新建String的详细过程
前言:本文解决的问题
- JAVA String s ="ABc";的过程是怎样的
Java中的String
Java中的String是不可改变的,一旦创建就不可再改变。常见的s1= s1+s2其实是重新创建了String。如果要创建可以更改的字符串类,建议使用StringBuilder或者StringBuffer。在回答口头的问题前先来看看String的源码。
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
}
从String前面的修饰符我们可以看到String是final类,不可以继承。在String提供的各种方法如subString、charAt()、concat()中,没有可以更改String内部元素的,String一旦被更改其实就是创建了新的字符串对象。
Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are immutable they can be shared.
String s ="ABc";的新建过程
JAVA中有个字符串池,它存储在堆(heap)中,可共享。任何时候一个新的对象被创建,会首先在字符串池中检查,那个对象是否存在,如果已经存在了,则返回该对象的引用;如果不存在,则新建。具体可以看下图。
下面是源代码演示:
public static void main(String[] args) {
String s1 = "Apple";
String s2 = "Mangle";
String s3 = "Apple";
System.out.println(s1==s3);
System.out.println(s1==s2);
}
结果:
true false |
总结
JAVA中在使用=号创建String对象时,会线检查JAVA String pool中有没有该对象,如果有,则把引用值返回;如果没有则新建。