
Strings java使用String和StringBuffer类封装字符串. Java使用16位Unicode字符来提供比传统的8位字符更大的国际字母范围. 字符串和字符串缓冲区都包含16位Unicode字符序列. 接下来的几节将研究这两个类以及Java的字符串连接功能. 字符串是由字符串和stringbuffer类封装的字符字符串. 与传统的8位字符相比,晚餐时使用16位字符可用于更广泛的国际字母.

两个字符串和字符串缓冲区包含顺序的16位字符. 接下来的几节将回顾这些类别以及Java的字符串连接特性. String类String类包含一个不变的字符串. 创建实例后,将无法更改其中包含的字符串. 构造函数有多种形式,可让您从字节或字符数组,字节或字符数组的子集,另一个字符串或字符串缓冲区中构建实例. 这些构造函数中的许多都为您提供了指定字符编码,指定为字符串;但是,认证考试不需要您知道字符编码的详细信息. 最常见的字符串构造函数可能只是将另一个字符串作为其输入. 当您要为新字符串指定文字值时,这很有用; String s1 = new String(“ immutable”);甚至更简单的缩写可以是: String s1 =“ immutable”;重要的是要知道使用String文字时会发生什么(在两个示例中均为“重要”). 每个字符串文字都在内部由String的实例表示.java类可能有一个这样的字符串池. 当编译文字时,编译器会在该池中添加适当的字符串. 但是,如果相同的文字已经作为类的文字出现在类中的其他地方,则它已在池中表示. 编译器不会创建新副本. 相反,它使用池中的现有代码. 这样做可以节省内存,并且不会造成任何损害. 由于字符串是不可变的,因此,一段代码无法通过修改共享字符串来损害另一段代码. 在本章中,您了解了equals()方法如何用于对两个对象进行深入的相等性检查. 使用字符串,equals()方法可以实现您所期望的: 检查包含的两个字符集合. 下面的代码显示了如何完成此操作: 1.字符串s1 =“比较我”; 2.字符串s2 =“比较我”; 3. if(s1.equals(s2)){4. 5.}毫不奇怪,第3行的测试成功. 根据对字符串文字如何工作的了解,可以看到,如果将第3行修改为使用==比较,如下所示,测试仍然成功: 1.字符串s1 =“ compare me”; 2.字符串s2 =“比较我”; 3. if(s1 == s2){4. //任何内容5.} ==测试成立,因为s2引用第1行中创建的池中的String. 图8.1以图形方式显示了//whatever.S1. “比较我”文字字符串池(图字符串池)图.1相同文字字符串(图8.1相同的文本)S2还可以通过显式调用构造函数来构造String,如下所示;请参见图2. 但是string池,这会导致没有明显优势的额外内存分配. String s2 = new String(“ Constructed”);编译此行后,将字符串文字“ Constructed”放入池中. 在运行时,将执行新的String()语句,并构造String的rfesh实例,并在文字池中复制String. 最后,将对新String的引用分配给S2. 图8.2显示了事件链. 字符串s2 = new String();图8.2显式调用String构造函数String类字符串包含不可变的字符串.

创建实例字符串后,它包含无法更改的字符串. 有许多种构造形式,可让您创建字节数组或字符,子集,字节数组或字符,另一个字符串或字符串缓冲区的示例. 这些构造提供的许多选项都指定字符编码,指定为字符串. 但是,认证考试不需要您知道详细信息的字符编码. 也许最常见的字符串构造函数只是另一个字符串作为其输入. 当您要指定文本值字符串时,这非常有用. String s1 = new String(“ immutable”);更简单的缩写可以是: string s1 =“ immutable”; ----- String s1 =“ immutable”;重要的是要知道使用字符串时会发生什么(在这两个示例中为“重要”). 每个字符串文字从字面上表示一个String的实例. Java类可能具有字符串池. 编译文本后,编译器将添加适当的字符串池. 但是,如果与文本相同的文本出现在其他地方的类中,则说明该文本已经在池中进行了编译. 设备的代表不会创建新的副本;相反,它使用现有的池. 这样可以节省内存,并且不会造成任何损害. 由于字符串是不可变的,因此有一种方式可以通过修改共享字符串来损害一段代码.

在本章的前面,您了解了equals()方法的使用方法,它提供了对两个对象的深入检查. 字符串,等于您期望的()期望: 检查以下代码是否包含字符. 这两个集合显示了如何执行此操作: 1.String s1 =“ Compare me”; 2.String s2 =“比较我”; 3.if(s1.equals(s2)){4. 5.}毫不奇怪,第3行的测试成功了. 现在您知道了字符串常量的工作原理,可以看到如果修改了第3行,请使用== compare,如下所示,测试成功了: //whatever1.String s1 =“ compare me”; 2.String s2 =“比较我”; 3.if(s1 == s2){4.//whatever5. } ==测试正确,因为S2引用了第1行中的字符串创建的池. 图8.1对此进行了图形化显示. 您还可以通过构造一个String来显式调用构造函数,如下所示;但是,这将不会在增加内存分配方面带来明显的优势. String s2 = new String(“ Constructed”);该行实际上是在编译时放入池中的“内置”字符串.

在运行时string池,新的String语句执行rfesh()构造一个String实例,将字符串复制到文本池中. 最后,将新的String引用分配给S2. 图8.2显示了一系列事件. 公共类StringTest1 {公共静态void main(String [] args){String str1 =“ abc”;字符串str2 =“ abc”; System.out.println(str1 == str2); }}公共类StringTest2 {公共静态void main(String [] args){String str1 = new String(“ abc”);字符串str2 = new String(“ abc”);}}
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-239280-1.html
美帝得逞了
很真实
大家的日子过得都不容易啊