Topic: 关与String的比较

  Print this page

1.关与String的比较 Copy to clipboard
Posted by: AchillesA
Posted on: 2005-04-19 20:47

class StringLiteral
{
public static vodi main(String[] args)
{
String java="java ",va="va";
System.out.println(java=="java");
System.out.println(Other.java==java);
System.out.println(java==("ja"+"va"));
System.out.println(java==("ja"+va));
}
}
class Other
{
static java="java";
}
+-----答案是:
true
true
true
false
我知道在java中Sting类型的创建是要先到一个字符串缓冲池去找有没有相同内容的String,如果有的话就将新的reference指向这个String;但是为什么最后的一个是false的呢?不清楚?

2.Re:关与String的比较 [Re: AchillesA] Copy to clipboard
Posted by: wmgreat
Posted on: 2005-04-19 21:16

是这样的吗?我运行的都是false
字符串比较equals方法,==会去比较地址!

3.Re:关与String的比较 [Re: AchillesA] Copy to clipboard
Posted by: myool
Posted on: 2005-04-20 08:53

因为4中字符串ja与上一个变量va,结果是一个字符串java,但是由于va在字符串缓冲池中会新开辟空间,所以你所得到的新的字符串的地址和java的地址不一样!!即此运算符"=="即比较地址,又比较内容!!

4.Re:关与String的比较 [Re: AchillesA] Copy to clipboard
Posted by: kaiserlew
Posted on: 2005-04-20 11:42

AchillesA wrote:
class StringLiteral
{
public static vodi main(String[] args)//void
{
String java="java ",va="va";
System.out.println(java=="java");
System.out.println(Other.java==java);
System.out.println(java==("ja"+"va"));
System.out.println(java==("ja"+va));
}
}
class Other
{
static java="java"; //static String
}
+-----答案是:
true
true
true
false
我知道在java中Sting类型的创建是要先到一个字符串缓冲池去找有没有相同内容的String,如果有的话就将新的reference指向这个String;但是为什么最后的一个是false的呢?不清楚?

是这样吗?应该全部都是false,还有,程序里有错误,怎么编译通过的啊
如果要比较String,要用equals

5.Re:关与String的比较 [Re: AchillesA] Copy to clipboard
Posted by: AchillesA
Posted on: 2005-04-20 12:51

确实是应该用equals,不过这里我主要是想知道String在jvm中创建的过程,所以用的==来试验一下。关键就是这点没有弄明白,我运行后全部都是false。
有一点,你比较的时候没有注意到:
java="java ",(多了一个空格)当然全部都是false了;
我看了下书,上面的意思就是,由于最后的一个比较是在runtime而前面的都是在 compile中比较的。如果是字面值(Literal value)那么,产生这个string的时候就会到字符串缓冲池中去找,看有没有相同的值,如果有的话,就将这个reference指向这个值。但是最后的一个在编译的时期,jvm不知道这个va的值,所以就没有能够在缓冲池中找这个值,所以创建了一个新的内存空间,并把这个值分配给了新的string

6.Re:关与String的比较 [Re: AchillesA] Copy to clipboard
Posted by: shejf
Posted on: 2005-04-21 11:05

你根本就是在瞎说!!!!
好好看看书

7.Re:关与String的比较 [Re: AchillesA] Copy to clipboard
Posted by: AchillesA
Posted on: 2005-04-21 12:27

但是书上就是这样说的啊:the false value shows what happens when we compare a string computed at runtime .and not complie time,because it is computed ar runtime ,a new string object is created that is brand new and therefore not equal to our other string object.

书上应该就是这个意思啊?我理解错了?


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923