Java程序中测试两个变量是否相等有两个方法,一种是==运算符,另一种是equals方法。
==:
当时用“==”判断两个变量是否相等时,如果两个变量是基本类型的变量,且都是数值类型,如果两个变量的值相等,则返回true;
但对于两个引用变量来说,它们必须指向同一个对象时,==才会返回true。==不能用于比较两个类型上没有父子关系的对象。
eg:
public class EqualTest {
public static void main(String[] args){
int it = 65;
float fl = 65.0f;
System.out.println("65 == 65.0f ? " + (it == fl));
char ch = 'A';
System.out.println(" 65 == A ? " + (it == ch));
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println("str1 == str2 ? " + (str1 == str2));
System.out.println("str1 equals str2 ?" + (str1.equals(str2)));
}
}
输出:
65 == 65.0f ? true
65 == A ? true
str1 == str2 ? false
str1 equals str2 ? true
可以看到,用“==”判断时,65,65f和‘A’相等。
str1和str2都是引用类型变量,它们分别通过new关键字创建了String对象,因此str1和str2两个变量不相等。
对于String来说,"hello"直接量和new String("hello")有什么区别呢?
“hello”,JVM将会使用常量池保存这些字符串;
new String("hello"),JVM会用常量池保存“hello”直接量,然后调用String类的构造器构造一个String对象,新创建的对象保存在堆内存中。