Java 为什么赢了';";“5”;。等于(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

我是Java新手,想知道为什么“5”。equals(5)求值为真,这两个都是5,在我看来似乎是一样的东西(它们对我来说似乎相等),那么为什么它不求值为真呢


感谢您的帮助:)

“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
,它们与数字相等,但与字符串不同。