java 学习2

来源:互联网 发布:淘宝打包员招聘 编辑:程序博客网 时间:2024/06/17 02:51
在今天的作业中有一个地方需要对两个String变量进行值的比较,我最开始使用的是==,如下:
String a=new Scanner(System.in).next();String b=new Scanner(System.in).next();if(a==b){   System.out.println("yes");}else{   System.out.println("no");}

但是在运行时发现结果总是no;在请教老师之后才清楚,原来在用==时,String型变量的比较还要对变量内存位置的比较,所以永远为假,要对String进行比较需要使用.equals()方法。但是当时对为何如此并不是很了解。但是在下午讲到了对象的本质时,有了一些更进一步的理解。那就是对象的本质是一段保存对象属性及方法的内存的首地址。这就说明了为什么对String进行比较是要比较内存的地址,因为String类型也是一个预先定义的类,也就是对象类型。所以一个String型变量的本质也是一段内存的首地址,当用==进行比较时,由于内存首地址的不同,所以只可能为假。