`==` compares references for objects (same instance), while `.equals()` compares logical equality as defined by the class (e.g., `String` compares content). For primitives, `==` compares values.
String a = new String("hi");
String b = new String("hi");
System.out.println(a == b); // false
System.out.println(a.equals(b)); // trueFor primitives (`int`, `long`, `boolean`), `==` compares values.
For reference types (`String`, `Integer`, your classes), `==` checks *identity* (same object), while `.equals()` checks *logical equality* (same content/state), as implemented by the class.
Integer a = 128, b = 128;
System.out.println(a == b); // often false (different objects)
System.out.println(a.equals(b)); // true
String s1 = "hi";
String s2 = new String("hi");
System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2));// true