Java 为什么==适用于整数而不适用于字符串?

Java 为什么==适用于整数而不适用于字符串?,java,object,equals,instances,Java,Object,Equals,Instances,我知道这一点: 当您使用==比较两个对象时,它将比较该对象的两个实例,并检查它们是否相等。 使用.equals()时,它将比较两个对象的状态 假设这是我的代码: String string1 = new String("abc"); String string2 = new String("abc"); Integer integer1 = new Integer(5); Integer integer2 = new Integer(5); int int1 = new Integer(6);

我知道这一点: 当您使用==比较两个对象时,它将比较该对象的两个实例,并检查它们是否相等。 使用.equals()时,它将比较两个对象的状态

假设这是我的代码:

String string1 = new String("abc");
String string2 = new String("abc");
Integer integer1 = new Integer(5);
Integer integer2 = new Integer(5);
int int1 = new Integer(6);
int int2 = new Integer(6);

if (string1 == string2)
    System.out.println("The strings are equal");
if (integer1 == integer2)
    System.out.println("The integers are equal");
if (int1 == int2)
    System.out.println("The ints are equal");

为什么这段代码只打印“整数相等”

=
比较引用,因为字符串是引用类型,
int
是值类型。

这是因为在Java中字符串是对象,对象只有在引用相等时才会相等。(它们是相同的对象)

因为对象的值是保存对象值的内存位置,而基元类型的值是其值本身。例如,如果你在String类型的对象上使用==,你是在比较它们的内存位置。

对于String,你必须使用
equals()
而不是
=
,因为它是一个对象。

银河系的每个人,停止询问此问题。请尝试使用大于127的整数…==运算符检查对象引用(对于字符串、整数等对象),但对于原语,它会检查其值。使用
equals
检查对象值是否相等。@marounnaroun并停止反复回答@哇,真是一针见血。如果您尝试使用大于127的整数,则更有可能遇到与其他引用变量相同的问题,因为对象不太可能是
==
。整数是对象而不是原语。因为Java是一种糟糕的语言,无法实现最有用的语法sugar-FTFY;)