|
最初由 xyj0323 发布
[B]
我觉的老兄这一次说的不对,这两种确实是是定义字符串变量的
两种方式,但这两者之间还是有一点区别的.
先来看一看这个例子:
String str1=new String("Java" ;
String str2="Java"
如果有下面的一些操作
str1.equals(str2),此表达式的结果会为true
可是如果使用比较运算符来判断,例:
str1==str2
你得到的结果会是false.因为str1和str2是两个不同的对象,而比较
运算符比较的是两个对象的内存地址,所以才会得到false这个结果。
现在有另外一个字符串对象
String str3="Java";
问题现在出来了,现在比较str2==str3时,你发现答案是true.为什么?
因为字符串是每个程序中一定会用到的对象,Java为了加强程序的运行速度,所以设计了两种不同的方法来生成字符串对象,一种是调用String类的构造函数,另一种是使用双引号"".这两种方法
生成的字符串对象,在内存中存放的方法是不一样的。使用构造
函数的方法所生成的对象,就像其他类生成的对象一样,有自己的独立空间;而之所以有双引号的方法,主要是为了加快程序运行的速度,所以Java会把这类字符串放在一个字符串缓冲池(String Pool)中,当用双引号产生字符串对象时,电脑先去字符串缓冲池中查找有没有相同的字符串已经放在里面了,如果有就直接拿出来用,如果没有就产生一个新的字符串放到字符串缓冲池中。
说了这么多,不知道大家明白了我的意思没有,双引号代表把字符串放的一个缓冲迟中,而类的构造函数却不是。 [/B]
既然使用构造函数的方法所生成的对象,就像其他类生成的对象一样,有自己的独立空间,那么str3和str2代表不同对象,str3==str2怎么会相同呢
不明白,希望再说一下 |
|