Nói chung, cả hai phương thức equal() và toán tử == trong Java đều được sử dụng để so sánh các đối tượng để kiểm tra sự bằng nhau nhưng đây là một số khác biệt giữa hai:
- Sự khác biệt chính giữa phương thức .equals () và toán tử == là: một cái là phương thức còn một cái là toán tử.
- Chúng ta có thể sử dụng các toán tử == để so sánh tham chiếu ( so sánh địa chỉ ) và phương thức .equals () để so sánh nội dung . Nói một cách đơn giản, == kiểm tra xem cả hai đối tượng có trỏ đến cùng một vị trí bộ nhớ hay không trong khi .equals () ước tính so sánh các giá trị trong các đối tượng.
- Nếu một lớp không ghi đè phương thức bằng , thì theo mặc định, nó sử dụng phương thức bằng (Object o) của lớp cha gần nhất đã ghi đè phương thức này.
- Ví dụ đoạn code:
public class Codelean {
public static void main(String[] args)
{
String s1 = new String( "CodeLean.vn" );
String s2 = new String( "CodeLean.vn" );
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
}
}
|
Đầu ra:
false
true
Giải thích: Ở đây chúng ta đang tạo hai đối tượng là s1 và s2.
- Cả s1 và s2 đều trỏ đến các đối tượng khác nhau.
- Khi chúng ta sử dụng toán tử == để so sánh s1 và s2 thì kết quả là sai vì cả hai đều có địa chỉ khác nhau trong bộ nhớ.
- Sử dụng bằng, kết quả là đúng vì nó chỉ so sánh các giá trị được cho trong s1 và s2.
Bây giờ chúng ta sẽ cùng tìm hiểu chi tiết hơn về các toán tử
Toán tử đẳng thức (==)
Chúng ta có thể áp dụng các toán tử đẳng thức cho mọi kiểu nguyên thủy bao gồm cả kiểu boolean. Chúng ta cũng có thể áp dụng các toán tử đẳng thức cho các loại đối tượng.
class CodeLean {
public static void main(String[] args)
{
System.out.println( 10 == 20 );
System.out.println( 'a' == 'b' );
System.out.println( 'a' == 97.0 );
System.out.println( true == true );
}
}
|
Đầu ra:
false
false
true
true
Nếu chúng ta áp dụng == cho các loại đối tượng thì sẽ có sự tương thích giữa các loại đối số (có thể là con với cha mẹ hoặc cha mẹ với con hoặc cùng loại). Nếu không, chúng ta sẽ nhận được lỗi biên dịch.
class Test {
public static void main(String[] args)
{
Thread t = new Thread();
Object o = new Object();
String s = new String( "CodeLean" );
System.out.println(t == o);
System.out.println(o == s);
// System.out.println(t==s);
}
}
|
Đầu ra:
false
false
// lỗi: loại không thể so sánh: Thread và String
.equals ()
Trong Java, phương thức chuỗi equal() so sánh hai chuỗi đã cho dựa trên dữ liệu / nội dung của chuỗi. Nếu tất cả nội dung của cả hai chuỗi đều giống nhau thì nó trả về true. Nếu tất cả các ký tự không khớp thì nó trả về false.
public class CodeLean {
public static void main(String[] args)
{
Thread t1 = new Thread();
Thread t2 = new Thread();
Thread t3 = t1;
String s1 = new String( "CodeLean.vn" );
String s2 = new String( "CodeLean.vn" );
System.out.println(t1 == t3);
System.out.println(t1 == t2);
System.out.println(s1 == s2);
System.out.println(t1.equals(t2));
System.out.println(s1.equals(s2));
}
}
|
Đầu ra:
true
fail
fail
fail
true
Giải thích: Ở đây chúng tôi đang sử dụng phương thức .equals để kiểm tra xem hai đối tượng có chứa cùng một dữ liệu hay không.
- Trong ví dụ trên, chúng tôi đang tạo 3 đối tượng Thread và 2 đối tượng String.
- Trong so sánh đầu tiên, chúng tôi đang kiểm tra xem t1 == t3 hay không. Như chúng ta biết rằng cả t1 và t3 đều trỏ đến cùng một đối tượng , đó là lý do tại sao nó trả về true.
- Trong lần so sánh thứ hai, chúng tôi đang sử dụng toán tử == để so sánh các Đối tượng chuỗi chứ không phải nội dung của các đối tượng. Ở đây, cả hai đối tượng đều khác nhau và do đó, kết quả của sự so sánh này là
- Khi chúng ta so sánh 2 đối tượng String bằng toán tử .equals () thì chúng ta sẽ kiểm tra xem cả hai đối tượng có chứa cùng một dữ liệu hay không.
- Cả hai đối tượng s1, s2 đều chứa cùng một Chuỗi là CodeLean.vn nên kết quả trả về đúng.
tham khảo: geeksforgeeks
إرسال تعليق