반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 미국대학
- 파이데이아창의인재학과
- Java 스터디
- 해외유학
- 2+2
- 만다라트프로젝트
- 자바 스터디
- Kenneth Park
- i-20
- 사이드프로젝트
- 개발일지
- California State University Sacramento
- 케네스
- 부산외대
- 유학생대학생활
- jpa
- 유학생 준비물
- 복수학위제도
- 케네스로그
- 미국유학생
- 자바
- JVM아키텍처
- java
- 미국대학생활
- 비전공자 git
- 개인 프로젝트 개발일지
- 미국유학
- 미국유학생활
- F1학생비자
- CSUS
Archives
- Today
- Total
케네스로그
[Java] 관계 연산자, 균등 연산자 본문
반응형
관계 연산자 Comparison Operator
관계연산자는 같은 타입의 값들을 비교하는 연산자를 말하며, 결과 값은 true 또는 false로 반환합니다.
균등연산자, 관계연산자 equality & relational operator
== | equal to |
!= | not equal to |
> | greater than |
>= | greater than or eqaul to |
< | less than |
<= | less than or eqal to |
균등 연산자와 관계 연산자 둘 다 피연산자들의 값을 비교합니다.
균등 연산자는 피연산자들이 같은지 다른지를 비교하며, 관계연산자는 피연산자 값들의 크기를 비교합니다.
균등연산자와 메모리 값 비교
균등 연산자의 경우, 각 피연산자가 어떤 타입이냐에 따라 나뉘어집니다.
- 두 피연산자 모두 primitive type인 경우
primitive variable이 저장되어 있는 stack영역의 메모리에서 값을 가져와서 비교합니다. - 한쪽은 primitive type, 다른 한쪽은 reference type인 경우
refeerence type 변수는 Heap영역의 메모리 주소를 갖고 있습니다. 따라서, primitive type 값과 메모리 주소 값이 동일한지 확인하게 되는 오류를 범하게 됩니다. - 둘 다 reference type인 경우
둘 다 reference type인 경우, 스택영역에서 저장하고 있는 변수가 같은 heap영역의 메모리 주소를 가리키고 있는지 확인하게 된다.
int a = 3;
int b = 3;
a == b // true
String s1 = new String("hello");
String s2 = new String("hello");
s1 == s2 // false
String s3 = "world";
String s4 = "world";
s3 == s4 // true
참조타입 비교 reference type comparision
==연산자는 피연산자(객체)가 메모리 공간 상 같은 곳을 가리키는지 확인한다.
new키워드를 통해 객체를 생성하면 새로운 메모리 공간에 객체가 생성된다.
레퍼런스 타입의 경우, 주소값을 다루는 데이터 타입이기때문에 균등/관계 연산자를 사용하는것이 적절치 않습니다.
// CASE 1
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1==s2); // false
// CASE 2
String s3 = "world";
String s4 = "world";
System.out.println(s3==s4); // true
CASE 1에서는 “hello”라는 문자열을 각각 새로운 메모리에 할당하여 비교합니다. 그렇기에 같은 문자열을 갖고 있지만, 서로 다른 주소를 참조하고 있습니다. 그 결과로 둘을 비교하면 false를 반환한다.
CASE 2에서는 메모리 공간에 위치한 “world”라는 문자열을 둘 다 가리킵니다. 따라서, 둘을 비교하면 true를 반환하게 됩니다.
반응형
'Dev > Java' 카테고리의 다른 글
[Java] 메소드, 접근제어자 (0) | 2022.02.08 |
---|---|
[Java] 클래스 (0) | 2022.02.08 |
[Java] 쉬프트 연산자 <<, <<< (0) | 2022.02.05 |
[Java] 비트연산자 bitwise (0) | 2022.02.04 |
[Java] 산술연산자 (0) | 2022.02.04 |