![(string) 和string.valueof_string[]转string_string池](http://pic002.cnblogs.com/images/2012/418913/2012121600321914.png)
1. 字符串的基本操作
String对象的内容永远不会改变,也就是说,String对象不会改变(引用已更改). 如果操作了String字符串,则会形成一个新字符串并将其分配给原始字符串,原始字符字符串的对象保持不变,然后重新引用一个新对象(Stringstr =“ abc”; str = str +“ def”;在这种情况下,str重新引用对象“ abcdef”,并且原始创建的“ abc”,“ Def”对象保持不变),字符串比较使用equals. 您还可以使用新的String(str.getBtyes(“原始编码”),“新编码格式”);转换字符编码格式.
Q: Stringstr =“ abc”和Stringstr = newString(“ abc”);有什么区别?
答案: 上面两段代码之间的区别是,在我们执行此行代码后创建了多少个对象?当然,此两段代码认为每个人都不陌生,答案也众所周知. Stringstr = newString(“ abc”);创建2个对象,并通过Stringstr =“ abc”创建1个对象.
![string池_string[]转string_(string) 和string.valueof](http://img-blog.csdnimg.cn/20200525130659965.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2gzODAxMTU5OTA=,size_16,color_FFFFFF,t_70)
我们可以将以上代码分成四个部分: Stringstr,=string池,“ abc”和newString(). Stringstr只是定义了一个String类型的变量str,因此它不会创建对象. =是初始化变量str,为对象分配引用(或句柄),显然不会创建对象;现在只剩下newString(“ abc”). 那么,为什么可以将newString(“ abc”)视为“ abc”和newString()?
让我们看一下我们调用的String构造函数:
publicString(Stringoriginal){// othercode ...}众所周知,创建类的实例(对象)有两种常用方法:
①,使用new创建对象.
![(string) 和string.valueof_string池_string[]转string](http://www.mianfeiwendang.com/pic/309b814c65ab23f843a7c1ea/1-810-jpg_6-1080-0-0-1080.jpg)
②,调用Class类的newInstance方法,使用反射机制创建对象.
我们使用new来调用上述String类的构造方法来创建一个对象,并将其引用分配给str变量. 同时,我们注意到被调用的构造函数方法接受的参数也是String对象,恰好是“ abc”.
因此,我们必须引入另一种有关创建String对象的方法的讨论-引号包含文本. 此方法是String特有的,与新方法有很大的不同.
Stringstr =“ abc”毫无疑问,这行代码创建了String对象.
![(string) 和string.valueof_string[]转string_string池](http://www.it165.net/uploadfile/files/2014/0820/20140820202152195.jpg)
Stringa =“ abc”; Stringb =“ abc”;这怎么办?答案仍然是一个;
Stringa =“ ab” +“ cd”;在这里吗答案是三个!
Java虚拟机中有一个字符串缓存池,其中包含许多String对象,并且可以共享和使用,这是因为它大大提高了效率. String类是最后的类,其值一旦创建便无法更改string池,因此我们不必担心由于共享String对象而引起的程序混乱. 字符串池由String类维护,您可以调用intern()方法访问字符串池.
回头看看Stringa =“ abc”. 当执行该行代码时,虚拟机将首先根据String类的等于(Objectobj)在字符串池中查找值为“ abc”的现有对象. 有的,它不会创建新的对象,直接返回现有对象的引用;如果不是,请首先创建此对象,然后将其添加到字符串池,然后返回其引用.
![string池_string[]转string_(string) 和string.valueof](http://s1.ax1x.com/2020/05/17/Y2wrNR.jpg)
通过使用引号包含文本创建的字符串对象之间使用“ +”连接创建的新对象将添加到字符串池中. 对于包含以新方式创建的对象(包括null)的所有“ +”连接表达式,其生成的新对象将不会添加到字符串池中. 通常建议您使用引号将文本包括在内以创建String对象,以提高效率.
说明:
堆栈(stack): 保存基本类型(或内置类型. 例如charbyteshortintlonglongfloatdoubleboolean)和对象引用,可以共享数据,速度仅次于寄存器(register),比堆(heap)快
堆: 用于存储对象.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-239278-1.html
还有马航是怎么回事
没准它生在战争年代又是叧一个