Java的各种比较

使用Java进行比较在Java中,通常使用以下三个进行比较。

==演算子

equalsメソッド

instansof 演算子

关于运算符在Java的世界中,存在着原始类型和引用类型。当创建原始类型的值时,它们会直接写入内存中。其中的原始类型包括int和boolean。在Java中,==用于比较原始类型的值。

int a = 10;
int b = 10;
int c = 20;

System.out.println(a == b); //true
System.out.println(a == c); //false

另外,Java 中还有一种称为枚举的列挙类型。枚举类型可以像类一样使用,但不能在其他类中实例化,只能在枚举内部进行一次实例化。也就是说,枚举实例在程序中只保证存在一个。因此,枚举也可以进行==比较。使用==进行枚举比较被推荐,因为它是空安全的,并且当比较的枚举类型不匹配时会在编译时发现错误。

public enum WEEK {
    SUNDAY("日曜日"),
    MONDAY("月曜日"),
    TUESDAY("火曜日"),
    WEDNESDAY("水曜日"),
    THURSDAY("木曜日"),
    FRIDAY("金曜日"),
    SATURDAY("土曜日");

    private String name; // フィールドの定義

    private WEEK(String name) { // コンストラクタの定義
      this.name = name;
    }
}
Week week = Week.SUNDAY;

System.out.println(week == Week.SUNDAY); //true
System.out.println(week == Week.SATURDAY); //false

关于equals方法
equals方法用于比较引用类型(例如字符串和对象)的情况。为什么在比较字符串和对象时不能使用==呢?答案是如果在比较字符串或对象时使用==,它将判断引用类型变量是否引用相同的实例(即判断它们是否相等)。而使用Java提供的引用类型equals方法时,它将判断引用实例的内容是否相同(即判断它们是否等价)。

List<String> test1 = Arrays.asList("a","b","c");
List<String> test2 = Arrays.asList("a","b","c");

System.out.println(test1 == test2); // false
System.out.println(test1.equals(test2)); // true

使用equals方法需要注意两点。
第一点是它不具备空安全性。如果左边包含了null,将会出现NullPointerException异常。

String a = null;
String b = "test";

System.out.println(a.equals(b)); // NullPointerException

第二个是,Object类中定义的equals方法只进行了对自身对象(this)和传入参数的引用对象进行等值判断。

public boolean equals(Object obj){
       return(this == obj);
}

所以,如果我们想要使用我们自行定义的类的对象进行等值判断,就需要重写equals方法。

public class Person{
  String name;

  // コンストラクタ
  public Person(String name) {
    this.name = name;
  }

  @Override
  public boolean equals(Object obj) {
    // Personにキャストして、nameの値が同じか調べる
    return name.equals(((Person)obj).name);
  }
}
Person test1 = new Person("test");
Person test2 = new Person("test");

System.out.println(test1 == test2); // false
System.out.println(test1.equals(test2)); // true

最后是一点小插曲,Lombok提供了@EqualsAndHashCode注解,它可以自动覆盖equals方法,实现等值判断。

@EqualsAndHashCode
public class Person{
  String name;

  // コンストラクタ
  public Person(String name) {
    this.name = name;
  }
}
Person test1 = new Person("test");
Person test2 = new Person("test");

System.out.println(test1 == test2); // false
System.out.println(test1.equals(test2)); // true

关于instanceof运算符。
12月12日的日程安排预计

bannerAds