java程序输出问题

来源:百度知道 编辑:UC知道 时间:2024/06/09 04:52:44
String s1=new String("123");
String s2=new String("123");
System.out.println(s3==s4);
System.out.println(s3.equal(s4));
为什么第一个输出是false而第二个是true

==是用于对象地址的比较(用于基本数据类型,如int,float,这时才是值的比较);你用来比较两个String对象,他们的地址不一样,所以返回false;
equal方法用于比较两个对象的值。

所以你要搞清楚你要比较的是对象还是基本数据类型。
如果是对象,才有equals方法,此时的==是地址比较。
如果是基本类型,是没有equals方法的,只能用==进行比较。

s1,s2是对象,不能用==比较,==比较的是他们的地址

字符串比较不能用“==”

S3,S4是两个字符串在内存的地址值,是不同的,所以System.out.println(s3==s4);
输出false

s3.equal(s4)
是从这两个地址中取出他们各存储的字符串,他们存储的都是"123",所以相等

对象,看看对象

连等于 比较的是对象指向的内存地址

equlas (源自API文档)是
public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。
equals 方法在非空对象引用上实现相等关系:

自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
对于任何非空引用值 x,x.equals(null) 都应返回 false。
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当