아래와 같이 equals을 사용해서 작성할수 있음
=================================================================================================================
String aaa = "김성철";
System.out.println(aaa.equals("김성철"));
=================================================================================================================
다만 아래처럼 앞에 있는 객체가 null 값이면 NullPointerException이 발생함
=================================================================================================================
String aaa = null;
System.out.println(aaa.equals("김성철"));
=================================================================================================================
그래서 이전에 작성한 내용처럼 비교할 문자열을 앞에 넣고 넘겨받은 변수를 뒤에 넣어서 하고 있었음
=================================================================================================================
String aaa = null;
System.out.println("김성철".equals(aaa));
=================================================================================================================
근데 JAVA 8 버전에서는 Objects.equals 함수가 생성되었음
사용방법은 Objects.equals(객체1,객체2); 임
=================================================================================================================
String name = "김성철";
System.out.println(Objects.equals(name,"김성철"));
//true
String name1 = null;
System.out.println(Objects.equals(name1,"김성철"));
//false , NPE 오류 발생하지 않음
=================================================================================================================
위의 Objects.equals 의 내용은 아래와 같음
null 체크까지 다 하고 있음
=================================================================================================================
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
=================================================================================================================
null 오류가 발생할수 있거나, null을 포함하여 비교하고 싶을 경우 사용하면 됨
이전에 작성한 내용
##################################################################################################################
equals 는 자바에서 제공하주는 비교 메소드임
== 연산자도 비교를 하지만 차이는
==는 주소를 비교하고, equals 는 안에 들어있는 객체의 값을 비교함
=================================================================================================================
String a1="aaa";
String b1="bbb";
if(a1==b1)
false;
if(a1.equals(b1)
true
String a2="aaa";
String b2=a2;
if(a2==b2)
true;
=================================================================================================================
중요 한건 이걸 기록하려고 한게 아님 이걸 모르는것도 아니고..
문득 okky 사이트를 보던중 어떠한 사람이 where 1=1 에 대해서 써놓은 글을보다보니
댓글에 if("aa".equals(str)) 과 if(str.equals("aa") 에 대해서 써놓은 것을 보게되었음
언뜻보면 같아보이지만 결과가 다르게 나올수 있음
case1. if("aa".equals(str))
=================================================================================================================
String str="aa";
if("aa".equals(str)){
System.out.println(true);
}else{
System.out.println(false);
}
출력 : true
=================================================================================================================
case2. if(str.equals("aa")
=================================================================================================================
String str="aa";
if(str.equals("aa")){
System.out.println(true);
}else{
System.out.println(false);
}
출력 : true
=================================================================================================================
위 두개의 케이스를 해보면 둘다 결과는 true가 나옴
두개의 객체가 똑같으니까 true 가 나오는건 당연함
근데 아래와같이 str에 null을 넣어서 실행하면 결과는 다름
case1. if("aa".equals(str))
=================================================================================================================
String str=null;
if("aa".equals(str)){
System.out.println(true);
}else{
System.out.println(false);
}
출력 : false
=================================================================================================================
case2. if(str.equals("aa")
=================================================================================================================
String str=null;
if(str.equals("aa")){
System.out.println(true);
}else{
System.out.println(false);
}
출력 : Exception in thread "main" java.lang.NullPointerException
at com.securus.RunTest.main(RunTest.java:24)
=================================================================================================================
위 두개의 차이점은 비교하려고하는 주체가 변수이냐, 아니면 비교값이냐로 할수 있다.
case1. 로 할 경우에는 NullPointerException 이 출력되지 않는다
해당 값이 없어도 상관 없을 경우에는 이대로 진행해도 된다, 굳이 null 체크를 하지 않아도 된다
case2. 로 할 경우에는 Null 체크를 진행해줘야 한다.
또한 해당 값이 없이 진행되면 안되는 경우에 적용해도 된다
뭐 전자나 후자나 결국 값이 다 있다면 같은 로직이지만
Null 체크가 필요없다면 case1로 해서 하는게 더 편의성이 좋다