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的变量初始化就不行了呢?
请各位大虾帮助,小弟感激不尽
感觉太难了,所以看了答案:
答案是:
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的变量初始化就不行了呢?
请各位大虾帮助,小弟感激不尽
解决方案 »
- 【求正解】100分求冒泡排序、快速排序、选择排序原理
- temp[j] = a[i];出现java.lang.ArrayIndexOutOfBoundsException:
- 请教一下classpath问题(不要灌水,说说自己的理解)
- 打包成jar后不能联网
- 请各位高手指点!有关smartupload上传文件的问题!该问题已经困扰我两周了!
- 如何实现压缩文件的解压?
- 昨天有了自己的专栏又升为三星,特此散分,感谢大家的支持与帮助
- 在linux 上我装了jbuilder7 怎么运行不了?
- JBuilder单步跟踪过程中,如何查看变量的值?
- 启动时报bean没找到错,项目右键maven“Update Project”后就好了是为什么?
- 关于overridden的问题
- 帮我看一下这个Des加解密类...
equals比较的是内容。用new创建对象时,都会 新 分配一个内存地址,所以就不等了。用=创建String对象时,是去内存里寻找,看有没有对应的内容,有就指向那里,所以相等。
:)
我的意思是,程序本身编译没错误,但运行的时候,比如我在最后对compare("hello","hello")进行了赋值,但是实际上程序比较的仍然是compare("lval", "rval")
//compare("hello","hello")
lval == rval: true //这确实返回true了?
lval != rval: false
lval.equals(rval): true//String s = new String("Hello");
//compare("Hello", s);
lval == rval: false
lval != rval: true
lval.equals(rval): true//compare("Hello", "Goodbye");
lval == rval: false
lval != rval: true
lval.equals(rval): false
lval == rval: true
lval != rval: false
lval.equals(rval): true
但比较的其实是"hello","hello"
非常感谢各位的热情帮助!!!
compare("hello","hello")的输出应该是lval == rval:true,比较的是"hello"和"hello"------------------------------------
== 和 equals 本来是一样的,比较的引用和值!但是一些基本类重写了equals方法,比如String,这样String比较的就是对象的值了,但==比较的仍然是引用!compare("hello","hello")的输出应该是lval == rval:true 这里有点不太明白,在函数p里是定义了2个引用来接受传过去的值的
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");
}
}
楼主这个意思吧
他的equals方法比较的是两个String对象的内容!
==的意思是 两个引用完全相同,他们指向了同一个对象
谢谢!
:)