728x90

 

없는 값을 체크 할 때 위의 둘을 쓰게 되는데

뭐가 다를까?

 

1. isEmpty()

인스턴스는 생성 되어있는 상태

but 안에 값은 비어있는 상태(정확하게는 ""으로 값이 들어가있는 상태)

    -  null과 공백데이터는 엄연히 다르다

java 1.6버젼에서 추가됨

ex) 빈 항아리

 

2. == null

null은 인스턴스가 생성되지 않은 상태

즉, 아무런 주소값을 가지고 있지 않는 상태이며, 값 자체가 존재하지 않음

ex)항아리 자체가 없음

 

 

 

직접 테스트해보자

// isEmpty() vs == null 차이
String testEmpty = "";
String testNull = null;

// 1. 공백값 & isEmpty() 체크
if(testEmpty.isEmpty()){
    System.out.println("1 : "+testEmpty);
}  

// 2. null & isEmpty() 체크
if(testNull.isEmpty()){
    System.out.println("2 : "+testNull);
} 

// 3. 공백값 & null 체크
if(testEmpty == null){
    System.out.println("3 : " + testEmpty);
}  

// 4. null & null 체크
if(testNull == null){
    System.out.println("4 : "+ testNull);
}

 

 

2번인 13라인에 NullPointerException 발생

공백 값이지만 값을 체크하는 거기 때문에 애초에 값 자체가 들어오지 않았기 때문에 NullPointerException이 발생한 것

 

 

2번을 주석처리하고 다시 돌려보면

조건이 true인 것만 발동하니 1,4번만 출력되는 걸 알 수 있다

3번은 공백에 null을 체크한거라 애초에 인스턴스가 존재하기 때문에 null 자체가 아니니 false이다

 

 

※ 비슷한 주제

 == vs equals

 

728x90
반응형
728x90

8.문자와 문자열

 

하나의 문자는 홑따옴표로 감싸줘야함. 캐릭터 타입의 변수에 저장할 있음

  • 홑따옴표 안에 두개 이상의 문자를 넣을 경우 에러

 

char ch = 'A';

char ch = 'AB';  // error

 

 

String s = "ABC";

  • 문자가 연속적으로 이어져 있는 것을, 문자열 or 문자열 리터럴이라고 부름
  • 문자열을 저장하려면 변수타입이 String이어야함
  • String 원래 자바에서 제공하는 class. 문자열을 다룰 사용
  • 문자열 class 워낙 자주 쓰이기에,  얘만 기본형 변수에 값을 저장하는 것과 같은 표현을 허용함

 

 

 

※ 문자열 출력별 차이

String s1 = "AB";

String s2 = new String("AB");

  • 위의 문장의 거의 같고 보통 위에 문장 사용
  • 차이는 9장에서

String s = "A";  // 문자 하나. ok

String s = "";   // 문자열. ok

char ch = '';    // 문자열. error

 

String s1 = "A" + "B"  // 결과값 "AB" : 문자열 하나로 결합하라는

  • "" + 7 "" + "7"   "7" : (숫자를 문자열로 캐스팅한 )
  • 문자열은 문자열하고만 결합이 가능해서 숫자7 문자열로 바꾸고 결합한
  • 숫자에 문자열을 결합하면 문자열 숫자가 되는
  • 연산 진행 순서는

ex) ""+7+7 "7"+7 "7"+"7" "77"

ex) 7+7+"" 14+"" "14"+"" "14"

 

문자열 + any type 문자열

any type + 문자열 문자열

 

728x90
반응형

+ Recent posts