".equals"와 "=="의 차이점은 무엇입니까?
이 질문에 이미 답변이 있습니다.
나는 오늘 강사를 바꿨고 그는 나에게 이상한 코드를 사용하여 말했다. (그는 사용하는 것이 더 낫다고 말했고 .equals
내가 이유를 물었을 때 그는 "그렇기 때문에!"라고 대답했습니다.)
그래서 여기에 예가 있습니다 :
if (o1.equals(o2))
{
System.out.println("Both integer objects are the same");
}
내가 익숙한 대신 :
if (o1 == o2)
{
System.out.println("Both integer objects are the same");
}
둘의 차이점은 무엇입니까? 그리고 그의 방식이 .equals
더 나은 이유는 무엇입니까?
빠른 검색 에서 이것을 찾았 지만 그 대답을 실제로 이해할 수 없습니다.
Java에서는 ==
항상 두 참조 (기본이 아닌 경우) 만 비교합니다. 즉, 두 피연산자가 동일한 객체를 참조하는지 여부를 테스트합니다.
그러나 equals
메서드를 재정의 할 수 있으므로 두 개의 개별 개체가 여전히 동일 할 수 있습니다.
예를 들면 :
String x = "hello";
String y = new String(new char[] { 'h', 'e', 'l', 'l', 'o' });
System.out.println(x == y); // false
System.out.println(x.equals(y)); // true
또한 두 개의 동일한 문자열 상수 (주로 문자열 리터럴이지만 연결을 통한 문자열 상수의 조합)는 결국 동일한 문자열을 참조하게됩니다. 예를 들면 :
String x = "hello";
String y = "he" + "llo";
System.out.println(x == y); // true!
여기 x
하고 y
있기 때문에 동일한 문자열에 대한 참조가있는 y
동일한 컴파일 시간 상수이다 "hello"
.
== 연산자는 객체가 동일한 인스턴스 인지 비교 합니다 . equals () 연산자는 객체 의 상태를 비교 합니다 (예 : 모든 속성이 동일한 경우). 객체가 다른 객체와 같을 때 자신을 정의하기 위해 equals () 메서드를 재정의 할 수도 있습니다.
당신과 내가 각각 은행에 들어가서 각각 새로운 계좌를 개설하고 각각 $ 100를 입금하면 ...
myAccount.equals(yourAccount)
이다true
그들이 가지고 있기 때문에 같은 값을 하지만,myAccount == yourAccount
같은 계정 이false
아니기 때문 입니다.
( Account
물론 클래스 의 적절한 정의를 가정합니다 . ;-)
==는 연산자입니다. equals는 Object 클래스에 정의 된 메소드입니다.
== 두 객체가 메모리에 동일한 주소를 가지고 있는지 확인하고 원시 객체에 대해 동일한 값을 가지고 있는지 확인하는 반면에 비교되는 두 객체가 동일한 값을 갖는지 확인하는 방법에 따라 equals 메소드는 객체에 대해 구현되었습니다. equals 메소드는 프리미티브에 적용 할 수 없습니다 (즉, a가 프리미티브 인 경우 a.equals (someobject)는 허용되지 않지만 someobject.equals (a)는 허용됨).
== 연산자는 두 개체 참조를 비교하여 동일한 인스턴스를 참조하는지 확인합니다. 이것은 또한 성공적인 매치에서 true를 반환합니다.
public class Example{
public static void main(String[] args){
String s1 = "Java";
String s2 = "Java";
String s3 = new string ("Java");
test(Sl == s2) //true
test(s1 == s3) //false
}}
위의 예 ==는 참조 비교입니다. 즉 두 객체가 동일한 메모리 위치를 가리 킵니다.
String equals ()는 객체의 값 비교로 평가됩니다.
public class EqualsExample1{
public static void main(String args[]){
String s = "Hell";
String s1 =new string( "Hello");
String s2 =new string( "Hello");
s1.equals(s2); //true
s.equals(s1) ; //false
}}
위의 예 문자열의 내용을 비교합니다. 문자열이 일치하면 true를 반환하고 그렇지 않으면 false를 반환합니다.
Java에서 "==" 연산자를 사용하여 두 개체를 비교하면 개체가 메모리에서 동일한 위치를 참조하는지 확인합니다. 전의:
String obj1 = new String("xyz");
String obj2 = new String("xyz");
if(obj1 == obj2)
System.out.println("obj1==obj2 is TRUE");
else
System.out.println("obj1==obj2 is FALSE");
문자열에 정확히 동일한 문자 ( "xyz")가 있더라도 위의 코드는 실제로 다음을 출력합니다. obj1 == obj2 is FALSE
Java String 클래스는 실제로 Object 클래스 의 기본 equals () 구현을 재정의하며 메모리의 위치가 아닌 문자열의 값만 확인하도록 메서드를 재정의합니다. 즉, equals () 메서드를 호출하여 2 개의 String 객체를 비교하면 실제 문자 시퀀스가 같으면 두 객체가 동일한 것으로 간주됩니다.
String obj1 = new String("xyz");
String obj2 = new String("xyz");
if(obj1.equals(obj2))
System.out.printlln("obj1==obj2 is TRUE");
else
System.out.println("obj1==obj2 is FALSE");
이 코드는 다음을 출력합니다.
obj1 == obj2는 TRUE입니다.
public static void main(String[] args){
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1.equals(s2));
////
System.out.println(s1 == s2);
System.out.println("-----------------------------");
String s3 = "hello";
String s4 = "hello";
System.out.println(s3.equals(s4));
////
System.out.println(s3 == s4);
}
Here in this code u can campare the both '==' and '.equals'
here .equals is used to compare the reference objects and '==' is used to compare state of objects..
(1) == can be be applied for both primitives and object types, but equals() method can be applied for only object types.
(2) == cannot be overridden for content comparison, but equals method can be overridden for content comparison(ex; String class, wrapper classes, collection classes).
(3) == gives incomparable types error when try to apply for heterogeneous types , where as equals method returns false.
The equals( )
method and the ==
operator perform two different operations. The equals( )
method compares the characters inside a String
object. The ==
operator compares two object references to see whether they refer to the same instance. The following program shows how two different String objects can contain the same characters, but references to these objects will not compare as equal:
// equals() vs ==
class EqualsNotEqualTo {
public static void main(String args[]) {
String s1 = "Hello";
String s2 = new String(s1);
System.out.println(s1 + " equals " + s2 + " -> " +
s1.equals(s2));
System.out.println(s1 + " == " + s2 + " -> " + (s1 == s2));
}
}
The variable s1
refers to the String instance created by “Hello”
. The object referred to by s2
is created with s1
as an initializer. Thus, the contents of the two String objects are identical, but they are distinct objects. This means that s1
and s2
do not refer to the same objects and are, therefore, not ==
, as is shown here by the output of the preceding example:
Hello equals Hello -> true
Hello == Hello -> false
Lets say that "==" operator returns true if both both operands belong to same object but when it will return true as we can't assign a single object multiple values
public static void main(String [] args){
String s1 = "Hello";
String s1 = "Hello"; // This is not possible to assign multiple values to single object
if(s1 == s1){
// Now this retruns true
}
}
Now when this happens practically speaking, If its not happen then why this is == compares functionality....
Here is a simple interpretation about your problem:
== (equal to) used to evaluate arithmetic expression
where as
equals() method used to compare string
Therefore, it its better to use == for numeric operations & equals() method for String related operations. So, for comparison of objects the equals() method would be right choice.
참고URL : https://stackoverflow.com/questions/1643067/whats-the-difference-between-equals-and
'developer tip' 카테고리의 다른 글
Ant에서 파일이 아닌 디렉토리의 존재를 확인할 수있는 방법이 있습니까? (0) | 2020.11.17 |
---|---|
XML을 java.util.Map으로 또는 그 반대로 변환하는 방법 (0) | 2020.11.17 |
OmniAuth 및 Facebook : 인증서 확인 실패 (0) | 2020.11.17 |
jQuery 또는 JavaScript로 버튼 클릭 동작을 시뮬레이션하는 방법은 무엇입니까? (0) | 2020.11.17 |
관리 Bean에서보기 및 요청 범위의 차이점 (0) | 2020.11.17 |