" String ".trim() == "String") !!!!!!!!!!!!!!!!!!!!!
if(" String ".trim() == "String")
System.out.println("Equal");
else
System.out.println("Not Equal"); //Not Equal
if( "STRING".toUpperCase() == "STRING")
System.out.println("Equal");
else
System.out.println("Not Equal"); //Equal
if("String".substring(0) == "String")
System.out.println("Equal");
else
System.out.println("Not Equal"); //Equal
后面的注解相应为结果
请大家解释一下这是为什么?????
问题点数:50、回复次数:22Top
1 楼peppi(静坐听风)回复于 2002-11-29 17:00:20 得分 2
if(" String ".trim() == "String") //trim()去掉空格,字符串判断相等
//用equals("String"),其它类似
System.out.println("Equal");
else
System.out.println("Not Equal"); //Not Equal
Top
2 楼dy18(黎明之目)回复于 2002-11-29 17:02:23 得分 0
跟据我上面的请大家给我解释一下Top
3 楼hotenM(南京)回复于 2002-11-29 17:07:28 得分 2
邪门外道,比较为什么要这么用,然后去研究?Top
4 楼jokerjava(冷血)回复于 2002-11-29 17:10:11 得分 2
==是判断对象相等的
字符串不能改变
改变字符串可用StringBuffer类
第一个不等因为" String "和String不是同一个对象 " String "前面有空格
第二个相等因为"String"是同一个对String象
第三个相等因为subString不能改变字符串 所以string这个String对象没有变
Top
5 楼knight12(12Knight)回复于 2002-11-29 17:19:54 得分 2
第二、第三个例子中
前"STRING"和后"STRING",前"String"和后"String"是同一对象实例,所以它们的引用相等。
而第一个例子中" String "和"String"不是同一个对象实例,所以不相等
注意:判断对象是否是同意对象用==,判断对象值是否相等用equal()
如下例:
if(" String ".trim().equals("String"))
System.out.println("Equal");
else
System.out.println("Not Equal"); //Equal
if( "string".toUpperCase() == "STRING")
System.out.println("Equal");
else
System.out.println("Not Equal"); //NOT Equal
if( "string".toUpperCase().equals("STRING"))
System.out.println("Equal");
else
System.out.println("Not Equal"); //EqualTop
6 楼windofsun(太阳风)回复于 2002-11-29 17:31:46 得分 2
TO: jokerjava(冷血)
我觉得你的第一和第三点说的有矛盾。
看看jdk的源代码:
public String trim() {
int len = count;
int st = 0;
int off = offset; /* avoid getfield opcode */
char[] val = value; /* avoid getfield opcode */
while ((st < len) && (val[off + st] <= ' ')) {
st++;
}
while ((st < len) && (val[off + len - 1] <= ' ')) {
len--;
}
return ((st > 0) || (len < count)) ? substring(st, len) : this;
}
可以看到,trim方法也是调用了substring方法的。如果第三点象你说的那样,那么trim也应该是这样Top
7 楼beyond_xiruo(CorruptionException)回复于 2002-11-29 17:39:48 得分 2
字符串比较应该用equalsTop
8 楼redkey(7P狼)回复于 2002-11-30 09:36:24 得分 2
楼上说的对Top
9 楼wjmmml(笑着悲伤)回复于 2002-11-30 09:45:38 得分 2
楼主比较的是内存地址,而不是2个串。Top
10 楼junnef(启天)回复于 2002-11-30 10:53:33 得分 2
你还是去研究一下对象的比较和普通简单类型数据的比较的区别最好。Top
11 楼goldennight(痞子蔡)回复于 2002-11-30 21:31:22 得分 2
我也同意楼上的皮皮,我一开始也有过这样的混淆问题。Top
12 楼fastmask(我心烦)回复于 2002-11-30 21:42:32 得分 2
其实dy18 (黎明之目) 是想考大家的编译原理,反复的进行对象引用的比较。他在后面正偷偷乐呢。Top
13 楼m_catfish(小胖)回复于 2002-11-30 21:55:28 得分 2
对同一常量字符串的引用是同样的。
String a = "abc";
String b = "abc"; 则 a ==b 是成立的
可是如果
String a = new String("abc");
String b = new String("abc"); 则 a==b是不成立的
Top
14 楼ncube(ncube)回复于 2002-12-01 16:50:20 得分 2
knight12说得很好!用==不能说明两者是否相同,应该是用函数~~~~~~!Top
15 楼prosong(prosong)回复于 2002-12-01 17:32:55 得分 2
字符串内容的比较用 equals
若是查看两个指针是否指向同一个对象 才是 ==Top
16 楼wang_zheng_wz(我打开任督二脉)回复于 2002-12-01 18:22:45 得分 2
Strings have the special characteristic that if a program has several String objects that contain identical character sequences, then those String objects all map to the same memory.
public class Test {
public static void main(String[] args) {
String s1 = "aaa";
String s2 = "aaa";
System.out.println(s1 == s2);
}
}Top
17 楼asdmonster(呆鸟四号)回复于 2002-12-01 19:14:52 得分 2
代码就懒得分析了。
对Object, == 比较的是二者是不是对同一Object的Reference;
equales() 比较的是二者的content是否一致。Top
18 楼coolskeeter(文子)回复于 2002-12-02 09:09:07 得分 2
把你所有的==换成
equals。
==比较的是两个obj reference。
equals是比较两个字符串的内容。Top
19 楼jokerjava(冷血)回复于 2002-12-02 10:19:59 得分 8
String a = "String";
String b = "String"; 则 a ==b 是成立的
a和b都只向"String"对象
所以他们相等
String s = " String ";
String tmp = s.trim();
tmp == s;他们都指向" String "对象 所以不等于"String"对象
String s = "String";
String tmp = s.trim();
tmp == s == "String"
所以("String".substring(0) == "String")是成立的Top
20 楼luxizhao(安)回复于 2002-12-02 10:53:55 得分 4
api 中trim、substring和toUpperCase方法中,
如果不需要变换的话是不会改变对象的,如
果需要变换都是会返回个new String()的。
而如果对象是new String()生成的,就是个
新的对象。和原来的String是不同的。所以:
" String ".trim() != "String"
"STRING".toUpperCase() == "STRING"
"String".substring(0) == "String"Top
21 楼macoff(天堂)回复于 2002-12-02 11:03:00 得分 2
‘==’只有是同一个对象时才成立(指向同一内存)
‘.equals()’才能比较对象的值Top
22 楼copyright(笨蛋白痴神经质)回复于 2002-12-06 10:33:51 得分 2
equals()比较内容是深度比较么?Top




