Java 为什么赢了';";“5”;。等于(5)计算为真?不是';他们不是都一样吗,都是5岁?
我是Java新手,想知道为什么“5”。equals(5)求值为真,这两个都是5,在我看来似乎是一样的东西(它们对我来说似乎相等),那么为什么它不求值为真呢Java 为什么赢了';";“5”;。等于(5)计算为真?不是';他们不是都一样吗,都是5岁?,java,equals,Java,Equals,我是Java新手,想知道为什么“5”。equals(5)求值为真,这两个都是5,在我看来似乎是一样的东西(它们对我来说似乎相等),那么为什么它不求值为真呢 感谢您的帮助:)“5”是一个字符串,而5是一个整数,.equals方法还比较了类型更深入地了解了函数的实际功能: 它检查您发送的值是否是String的实例 public boolean equals(Object value) { if (value instanceof String){ // continue com
感谢您的帮助:)“5”是一个字符串,而5是一个整数,.equals方法还比较了类型更深入地了解了函数的实际功能: 它检查您发送的值是否是
String
的实例
public boolean equals(Object value) {
if (value instanceof String){
// continue comparing..
}else{
return false;
}
}
如果该值不是String
的实例,则该方法将返回false,
在您的例子中,5是Integer
的一个实例
这就是为什么该方法将返回false
"5".equals(5);
可以写成:
"5".equals(new Integer(5));
只想说明一点:您最终将字符串对象与整数对象进行比较(如果确实存在newinteger()
调用,或者Integer.valueOf()
调用在这里并不重要)。String类上没有方法equals(int)
,因此编译器会将int
literal 5转换为整数对象(称为装箱)
问题是:在Java中,equals()方法(通常)会考虑对象的类型。字符串永远不能等于整数。与不同对象“表示”的“内容”无关。java是静态类型的。谷歌吧,它们不一样。你为什么会这么想?如果它们是“相同的”,那么
5.equals(“5”)
做什么呢?JavaScript有一个这样的操作符(=
)。现在,大多数人建议不要使用它,而应该使用==
,因为有些奇怪的效果。当使用这种宽松的相等检查时,你会遇到“奇怪的效果”的一个例子是,很难保持它的瞬时性:你说字符串“5”基本上与字符“5”或整数5相同,但后来有人建议它也应该适用于罗马文字——“V”毕竟也是5。突然你需要说字符串“5”等于字符串“V”或者放弃及物性——你得到了“A等于B”和“B等于C”,但“A不等于C”-这会导致各种各样的错误和混乱。@Hulk可能是传递性丢失的更好例子是5.0
和5.00
,它们与数字相等,但与字符串不同。