字符串是不可变的String对象是不可变的;它的内容是不能改变的下列代码会改变字符串的内容吗?String s ="Java":S ="HTML":Liang,Introduction toJava Programming,EighthEdition,(c)2011Pearson Education,Inc.Allrightsreserved.0132130807
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807 6 字符串是不可变的 String对象是不可变的;它的内容是不能改变的。 下列代码会改变字符串的内容吗? String s = "Java"; s = "HTML";
动画跟踪代码String s ="Java"S = "HTML":执行语句“string后"Java";"S: StringStringobjectfor"Java内容不能改变Liang,Introduction toJava Programming,EighthEdition,(c)2011Pearson Education,Inc.Allrightsreserved.0132130807
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807 7 跟踪代码 String s = "Java"; s = "HTML"; : String String object for "Java" s 执行语句“String s = "Java";”后 After executing s = "HTML"; : String String object for "Java" : String String object for "HTML" 内容不能改变 This string object is now unreferenced s 动 画
动画跟踪代码String s = "Java";S="HTML"执行语句“s="HTML"”后;String这个字符串对象现在未被引用Stringobjectfor"Java"StringString objectfor"HTML"Liang,Introduction toJava Programming,EighthEdition,(c)2011Pearson Education,Inc.Allrightsreserved.0132130807
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807 8 跟踪代码 String s = "Java"; s = "HTML"; : String String object for "Java" s 执行“String s = "Java"; 执行语句“s = "HTML"”后; : String String object for "Java" : String String object for "HTML" Contents cannot be changed 这个字符串对象现 在未被引用 now unreferenced s 动 画
限定字符串但同时因为字符串在程序设计中是不可变的,又会频繁地使用,所以Java虚拟机为了提高效率和节约内存,对具有相同字符串序列的字符串直接量使用同一个实例。这样的实例被称为限定的(interned)。例如:下面的语句Liang,Introduction toJava Programming,EighthEdition,(c)2011Pearson Education,Inc.Allrightsreserved.0132130807
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807 9 限定字符串 因为字符串在程序设计中是不可变的,但同时 又会频繁地使用,所以Java虚拟机为了提高效 率和节约内存,对具有相同字符串序列的字符 串直接量使用同一个实例。这样的实例被称为 限定的(interned)。例如:下面的语句
举例s"welcome to Java"Strings1: Strings3FStrings2=new string("welcometo Java");“Welcometo Java”的限定字符串对象"welcome to Java"strings3=1S2is+(s1System.out-println("sls2)); s2→=StringS3is+(s1s3));System.out.println("sl-=“Welcome to Java”的字符串对象如果使用new操作符,就会创建一人程序结果显示新的对象。sl == s 是 false如果使用字符串初始化方法,如果sl == s3 是 true限定对象已经被创建则没有新对象被创建,Liang,Introduction toJava Programming,EighthEdition,(c)2011Pearson Education,Inc.All10rightsreserved.0132130807
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807 10 举 例 程序结果显示 s1 == s 是 false s1 == s3 是 true 如果使用new操作符,就会创建一个 新的对象。 如果使用字符串初始化方法,如果 限定对象已经被创建则没有新对象 被创建。 String s1 = "Welcome to Java"; String s2 = new String("Welcome to Java") ; String s3 = "Welcome to Java"; System.out.println("s1 == s2 is " + (s1 == s2)); System.out.println("s1 == s3 is " + (s1 == s3)); : String “Welcome to Java”的 限定字符串对象 : String “Welcome to Java”的 字符串对象 s1 s2 s3