String是不可变对象
java.lang.String类运用了final润饰,不能被继续。Java顺序中的一切字面值,即双引号括起的字符串,如"abc",都是作为String类的实例完成的。
String是常量,其对象一旦组织就不能再被转变。换句话说,String对象是不可变的,每个看起来会修正String值的要领,现实上都是制造了一个全新的String对象,以包含修正后的字符串内容。而最初的String对象则涓滴未动。String对象具有只读特征,指向它的任何援用都不能够转变它的值,因而,也不会对其他的援用有什么影响。然则字符串援用能够从新赋值。
java字符串在内存中采纳unicode编码体式格局,任何一个字符对应两个字节的定长编码,即任何一个字符(不管中文照样英文)都算一个字符长度,占用两个字节。
例子:
public class Immutable { public static String upcase(String s) { return s.toUpperCase(); } public static void main(String[ ] args) { String str1= "Hello World"; System.out.println(str1); //Hello World String str2 = upcase(str1); System.out.println(str2); //HELLO WORLD System.out.println(str1); //Hello World } }
当把str1通报给upcase()要领时,现实通报的是援用的一个拷贝。实在,每当把String对象作为要领的参数时,都邑复制一份援用,而该援用所指的对象实在一向待在单一的物理位置上,从未动过。
String常量池
常量池(constant pool)指的是在编译期被肯定,并被保存在已编译的.class文件中的一些数据。它包含了关于类、要领、接口等中的常量,也包含字符串常量。Java为了进步机能,静态字符串(字面量/常量/常量衔接的效果)在常量池中建立,并只管运用同一个对象,重用静态字符串。关于反复涌现的字符串直接量,JVM会首先在常量池中查找,假如常量池中存期近返回该对象。
例2:
public class test1 { public static void main(String[] args){ String str1 = "Hello"; //不会建立新的String对象,而是运用常量池中已有的"Hello", String str2 = "Hello"; System.out.println(str1 == str2); //true //运用new关键字会建立新的String对象 String str3 = new String("Hello"); System.out.println(str1 == str3); //false } }
以上就是java中string类是什么的细致内容,更多请关注ki4网别的相干文章!