기본형
boolean,char byte,short,int,long,float,double와 같이 계산을 할 수 있는 타입.
저장 공간에 값 자체를 저장함
기본형 변수의 타입
- 정수 타입: byte (1byte), short (2byte), int (4byte), long (8byte)
- 부동소수점 타입: float (4byte) , double (8byte)
- 부울 타입: boolean (1byte) // true,false 두 가지 값만 표현
- 문자 데이터 타입: char (2byte)
기본형 변수의 선언
정수 타입
- int age = 20;
- long age = 20L; —> Long type을 사용하기 위해선 반드시 붙여야 함
부동소수점 타입
- double dot = 10.2
- float dot = 10.2F —> float 타입을 사용하기 위해선 반드시 붙여야 함
변수 형변환
- 확장 변환
- 데이터 타입보다 더 큰 타입으로 변환되기 때문에, 값의 손실이 없다
- 축소 변환
- 데이터 타입보다 더 작은 타입으로 메모리 공간이 축소되기 때문에, 값의 손실이 생김
- 데이터 변환 방법
- 데이터 손실이 생기는 축소 변환에만 casting 필요
ex) int a = (int)10.2F;
-
- boolean을 제외한 7가지 기본형 간에는 서로간의 형변환이 가능
참조형
- 기본형을 제외한 나머지 타입. String , StringBuffer ,List등 혹은 개인이 만든 클래스도 참조형 타입이 가능
- 참조 값(주소)를 가지는 자료형
- 자바 API에서 제공되거나 프로그래머에 의해서만들어진 클래스를 자료형으로 선언하는 경우
- 참조변수는 클래스 이름을 가지고 만들 수있다. (Member mem;) ==> 변수의 타입이 기본형이 아닌것들은 모두 참조 변수
힙과 스택의 저장되는 메모리 차이
위의 사이트서 자세하게 다루고있다.
== 과 Equals()의 차이점
1) 형태의 차이
우선 가장 단순한 차이점은 형태의 차이이다
- equals()는 메소드이다 --> 객체끼리 내용을 비교할 수 있도록 한다.
- == 는 비교를 위한 연산자 이다.
- equlas 메소드는 비교하고자 하는 대상의 내용 자체를 비교하지만
- == 연산자는 비교하고자 하는 대상의 주소값을 비교한다.
String a = "bbb";
String b = a;
String c = new String("bbb");
위 코드에서 보면 변수 b는 a를참조하고있어서 둘다 bbb를 가지고있다. 또한 변수 c도 문자열을 선언하여 bbb를 가지고있다.
변수 b는 a를 참조하고있어서 a의 주소값과 b의 주소값이 같고 c의 경우 문자열을 새로 선언해주었기 때문에 새로운 주소값을 할당받게되어 a,b 의 주소값가 다른 주소값을 가지게 된다.
여기서 ==연산자의 경우 a==b 의 경우 주소값이 같으므로 true를 반환하지만 a==c or b==c의경우 주소값이 다르므로 false를 반환한다.
equals()메소드라면 어떨까?
equals()메소드는 비교하는 대상자체 즉 변수의 value값을 통해서 비교한다고 위에 표기해두었다. 이걸 생각하면 a.equlas(b) 는 당연하게 true를 반환한다. 그리고 a.equlas(c)와 a.equlas(b)의 경우도 둘다 value값은 bbb로 동일하기때문에 true를 반환하게 된다.
결론
==연산자는 Call By Reference (대상을 선언했을 때 ,주소값 부여) 에 따라서 해당 객체나 변수의 주소값을 통한 비교
equals()메소드는 Call By Value(기본적으로 대상에 주소값을 가지지 않는 것으로 값을 할당 받는 형태)에 따라 해당 변수에 value값 자체를 비교하며 boolean값을 반환한다.
'Coding > Java' 카테고리의 다른 글
Map- HashMap,TreeMap,LinkedHashMap 비교하기 (0) | 2019.11.13 |
---|---|
Set ->hashset, treeset, linkedhashset, sortedset (0) | 2019.11.13 |
List -> ArrayList,LinkedList,Vector (0) | 2019.11.13 |
GIT 과 SVN의 차이 + Git의 Rebase와 Merge (0) | 2019.11.13 |
추상 메소드와 인터페이스 (Abstract and Interface) (0) | 2019.11.07 |