求助:JAVA编程思想的一道习题
2版第3章中有道习题(第6题)
感觉太难了,所以看了答案:
答案是:
public class E06_CompareStrings {
public static void p(String s, boolean b) {
System.out.println(s + ": " + b);
}
public static void
compare(String lval, String rval) {
//! p( "lval < rval: " + lval < rval);
//! p( "lval > rval: " + lval > rval);
//! p( "lval <= rval: " + lval <= rval);
//! p( "lval > = rval: " + lval > = rval);
p( "lval == rval ", lval == rval);
p( "lval != rval ", lval != rval);
p( "lval.equals(rval) ", lval.equals(rval));
}
public static void main(String[] args) {
compare( "Hello ", "Hello ");
String s = new String( "Hello ");
compare( "Hello ", s);
compare( "Hello ", "Goodbye ");
}
}
感觉答案是挺正确的
但是运行的时候,为什么函数compare的变量初始化就不行了呢?
请各位大虾帮助,小弟感激不尽
------解决方案--------------------==比较的是内存地址;
equals比较的是内容。
用new创建对象时,都会 新 分配一个内存地址,所以就不等了。
用=创建String对象时,是去内存里寻找,看有没有对应的内容,有就指向那里,所以相等。
------解决方案--------------------我是初学java,但是我觉得程序执行得没有问题呀?
------解决方案--------------------compare( "hello ", "hello ")的输出应该是lval == rval:true,比较的是 "hello "和 "hello "
------解决方案--------------------yeah920的解释正确,==比的是两个字符串的内存地址 equals比的是字符串内存地址上保存的值
------解决方案--------------------hhx420() ( ) 信誉:100 Blog
compare( "hello ", "hello ")的输出应该是lval == rval:true,比较的是 "hello "和 "hello "
------------------------------------
== 和 equals 本来是一样的,比较的引用和值!但是一些基本类重写了equals方法,比如String,这样String比较的就是对象的值了,但==比较的仍然是引用!
compare( "hello ", "hello ")的输出应该是lval == rval:true 这里有点不太明白,在函数p里是定义了2个引用来接受传过去的值的
------解决方案--------------------public class E06_CompareStrings {
public static void p(String s, boolean b) {
System.out.println(s + ": " + b);
}
public static void
compare(String lval, String rval) {
//! p( "lval < rval: " + lval < rval);
//! p( "lval > rval: " + lval > rval);
//! p( "lval <= rval: " + lval <= rval);