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)中,可共享。任何时候一个新的对象被创建,会首先在字符串池中检查,那个对象是否存在,如果已经存在了,则返回该对象的引用;如果不存在,则新建。具体可以看下图。
java-string-pool

下面是源代码演示:

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中有没有该对象,如果有,则把引用值返回;如果没有则新建。

原文地址:https://www.cnblogs.com/java-learner/p/9667581.html