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

데이터 형변환

 

1.형변환

문자열과 숫자의 +연산

문자열과 숫자가 연산하면 str화된다

<button onclick="testPlus();">문자열과 숫자의 +연산</button>
<script>
  function testPlus(){
    var test1 = 7 + 7;          // 14
    var test2 = 7 + '7';        // 77
    var test3 = '7' + 7;        // 77
    var test4 = '7' + '7';      // 77
    var test5 = 7 + 7 + '7';    // 147
    var test6 = 7 + '7' + 7;    // 777
    var test7 = '7' + 7 + 7;    // 777

    console.log(test1);
    console.log(test2);
    console.log(test3);
    console.log(test4);
    console.log(test5);
    console.log(test6);
    console.log(test7);
    // 자바와 문자열+string의 로직 동일
		// 콘솔창 결과에서 글씨색이
    // 숫자나 불린값의 살짝 푸른빛
    // str은 검은색

		// 강제 형변환 : Number(), parseInt(), parseFloat()...
    console.log(test2 + 1);                 // 771
    console.log(Number(test2) + 1);        // 78 // 문자이기에 형변환 필요
    console.log(parseInt(test2) + 2);       // 79
    console.log(parseFloat(test2) + 3);     // 80
  }
</script>

2.강제 형변환

강제 형변환 : Number(), parseInt(), parseFloat()...

// 강제 형변환 : Number(), parseInt(), parseFloat()...
    console.log(test2 + 1);
    console.log(Number (test2) + 1);        // 78 // 문자기에 형변환 필요
    console.log(parseInt(test2) + 2);       // 79
    console.log(parseFloat(test2) + 3);     // 80

 

C.연산자

다른 연산자들은 자바와 비슷한게 많음

자바와는 다른 연산자

 

===와 !==

=== : 값과 자료형 둘 다 일치하는지 비교 !== : 값과 자료형 둘 다 일치하지 않는지 확인할 때 사용

<button onclick="opTest();">확인하기</button>
<script>
    function opTest(){
        var check1 = 1;
        var check2 = '1';

        console.log('check1 == 1 :' + (check1 == 1));       // check1 == 1 :true
        console.log('check1 == "1" :'  + (check1 == '1'));  // check1 == "1" :true
        console.log('check2 == 1 : ' + (check2 == 1));      // check2 == 1 :true
        console.log('check2 == "1" : ' + (check2 == '1'));  // check2 == "1" :true
        // 값을 비교할 때, 위처럼 숫자로 변환 가능한 문자를 숫자랑 비교하면 true로 인지해줌
        // 어느정도 허용적인거지 나중에 철저히 해야 에러발생x // 애매해서 안하는걸 추천
        // JS에서는 비교를 순수 값으로 함. 주소값으로 비교하지 않음
}        
</script>

==과 === 차이

== 연산자를 이용하여 서로 다른 유형의 두 변수의 [값] 비교

==='는 엄격한 비교를 하는 것으로 알려져 있다 ([값 & 자료형] -> true)

// == 비교
console.log('check1 == 1 :' + (check1 == 1));       // check1 == 1 :true
console.log('check1 == "1" :'  + (check1 == '1'));  // check1 == "1" :true
console.log('check2 == 1 : ' + (check2 == 1));      // check2 == 1 :true
console.log('check2 == "1" : ' + (check2 == '1'));  // check2 == "1" :true
// 값을 비교할 때, 위처럼 숫자로 변환 가능한 문자를 숫자랑 비교하면 true로 인지해줌
// 어느정도 허용적인거지 나중에 철저히 해야 에러발생x // 애매해서 안하는걸 추천
// JS에서는 비교를 순수 값으로 함. 주소값으로 비교하지 않음
// === 비교 
console.log('check1 === 1 :' + (check1 === 1));       // check1 == 1 :true
console.log('check1 === "1" :'  + (check1 === '1'));  // check1 == "1" :false
console.log('check2 === 1 : ' + (check2 === 1));      // check2 == 1 :false
console.log('check2 === "1" : ' + (check2 === '1'));  // check2 == "1" :true

추가자료

https://velog.io/@filoscoder/-와-의-차이-oak1091tes

 

 

728x90
반응형
728x90

 

JAVA 제어문 - 5. == vs equals

== equals 차이점 알아볼

 

 

자바의 데이터타입 두가지

구분하는 이유 : 기본형(primitive) 아닌 것을 자바가 차이를 두기 때문

 

 

1.primitive (원시 데이터타입)

boolean, int, double, short, long, float, char

 

2.non primitive

String, Array, Date, File…

 

 

자바가 타입을 어떻게 차별하고 뭐가 다른지를 알아보자

 

같은 1 value값이기에 다른 곳에 저장하면 낭비니 p1 1 값이 저장된 곳에 1 값을 똑같이 p2 끌어오게 자바에서는 처리한다

이때 같은 곳을 가리키고 있냐고 알아보는 것이 ==이고 결과값은 true 나온다.

 

 

위에 처럼

String o1 = new String("java");
String o2 = new String("java");

둘이 값은 같은데 == 보면 어떨까? false 된다. 같은 값이지만 ==(primitive data type) 같은 곳에 위치하는지 저장됬는지 주소를 보고 판단하기 때문

 

 

그렇다면 equals(non primitive data type)?

o1.equals(o2) 메소드 호출

내용이 같은지 판단하기에 true

 

 

 

원시 데이터 타입(primitive) 때는 동등비교연산자를 쓰면 된다

원시 데이터 타입은 equals 가지고 있지 않기에 쓰면 에러

원시 데이터 타입이 아닌 (non primitive) 때는 equals 써라

 

 

 

예외 : 문자열

(자주사용 편의성 성능 등으로 인한 특혜)

마치 원시 데이터 타입처럼 작동함 : non primitive type이지만 새로운 값을 생성하지 않고, 같은 값의 주소로 처리

String o3 = "java2"
String o4 = "java2"

 

 

== 동등 비교 연산해보면 true

 

 

 

*이 객체와 객체가 같은지 알아볼려면 검색해서 따져봐라

객체라고 하는 것은 복합적인 데이터타입이기 때문에 비교가 쉽지 않기 때문

 



==와 equals의 차이를 더 이해하려면

call by reference와 call by value에 대해 아래 링크에서 좀 더 알아보자

https://rise-up.tistory.com/182

 

 

 

 

 

728x90
반응형
728x90

JAVA 제어문(Flow Control) - 3. 비교연산자(Comparison Operator)

 

1+1=2

+ 산술 연산자로써 2 만들고

 

"1"+"1"="11"

여기서 + 문자열을 만들어내는 연산자

 

이번 시간 알아볼 것은

불리언 데이터 타입들 간의 연산을 하는 친구

 

비교연산자(Comparison Operator)

왼쪽에 있는 값과 오른 쪽에 있는 값을 비교해서 결과가 무엇이냐에 따라서 True 또는 False 하나의 값을 만들어 내는 연산자(operator)

 

종류

1)대소 비교연산자

<

>

<=

>=

2)등가 비교연산자

== : 같다 (call by reference & value 참조)

!= : 같지않다

728x90
반응형
728x90

문제

 

 

<풀이과정>

 

 

728x90
반응형
728x90

문제

 

<풀이과정>

728x90
반응형
728x90

문제

 

 

<풀이과정>

관계연산자(비교 연산자) : ==,!=,>,<,>=
논리연산자 : and, or, not

 

 

정답

 

 

 

위의 bool()과 and만 사용한 마지막 적용이 안된 이유

- 둘 다 크면 1 아니면 0이라는 조건이 없었기 때문. 결국 if문만 가능한듯

 

728x90
반응형
728x90

문제

 

 

<풀이과정>

728x90
반응형

+ Recent posts