关于java中的substring。

String b = "8)";
String c = b.substring(b.length()-1, b.length());
boolean a = c==")";
System.out.println(a);
System.out.println(c);
为什么a的值运行之后是false?

一、“==”比较的是内存地址是否相等:
1) String b = "8)",这个"8)"是最简单的字符串常量(直接写出来的,没有通过计算或其它逻辑处理得到),它存放于内存中的静态区,")"同样也是最简单的字符串常量;
2) String c = b.substring(b.length()-1,c的结果虽然也是")",但它是对字符串常量b调用substring方法得到的,一调用这个方法,新的对象就产生了,新对象位于堆内存中。
3) c和直接拼写出来的")"是不同的2个对象,2个对象的内存地址必须不一样,所以c==")"是false。

二、“equals”是实际用的最多的(而“==”只是出现在练习题中),它只要2个字符串对象长的一样就为true,c.equals(")")一定是true。实际开发当中,我们需要比较的字符串,确实只是想知道它们长得一不一样,至于是不是同一个内存--从来不会遇到这种问题。

总之,String是有点特殊的类型,多看几个练习就了解规则了(规则都是人定的,没有太多理由)。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-05
==在java中对八大基本数据类型比较的是基值的大小 ,对引用数据类型比较的是基引用地址。String是引用数据类型,b.substring(b.length()-1,b.length());新产生了一个引用,与“)”是不同的引用地址,所以c的引用地址于“)”的引用地址不等
第2个回答  2012-12-05
java的基础没学好 字符串不能用==来判断是否相等 要用string的equal方法来判断的
第3个回答  2012-12-07
数值用==比较,字符串用equals()方法来自:求助得到的回答
第3个回答  2012-12-07
1楼解释的对,你可以看看==跟equals的区别