length는 배열(array)의 길이를 알고자 할 때 사용된다.
ex)int[], double[], String[] ...
length()는 문자열(String)의 길이를 알고자 할 때 사용된다.
ex) String, StringBuilder ...
size()는 컬랙션프레임워크 type의 길이를 알고자 할 때 사용된다.
ex) Object(ArrayList, Set ...)
자바의 자료형은 Primitive Type과 Reference Type 으로 나뉜다.
Primitive Type(기본형) : 비객체 타입으로, Null을 가질 수 없는 형태이다.
Reference Type(참조형): 참조형은 java.lang.Object를 상속받습니다. 기본형이 아닌 자료형은 모두 참조형이며, Class, Interface 등이 있습니다.
기본형 / 래퍼 클래스
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Char
boolean Boolean
ex)
String a = "abc";
String a = "ab";
=> immutable하다는 것은 final 변수마냥 값이 변할 수 없는 것 아닌가? 이건 값이 변한 것 같은데?
=> 이런 생각이 든다면 자료형 공부를 다시 해야할 필요가 있다.
String a = "ab"; 은 다음과 같다.
String a = new String("ab");
=> 이는 동일한 주소값을 가지는 a 라는 변수의 값이 바뀐게 아니라,
a가 생성자를 통해 새롭게 주소값을 가지게 되며 그 새로운 주소값에 ab라는 String 값을
부여 받은 것이다.
ex)
String s1 = "123";
String s2 = "123";
String s3 = new String("123");
* String의 리터럴이 동일한 경우, jvm이 같은 값을 가지는 주소를 찾는다. 그리고 같은 값을 가진 경우, 동일한 주소값을 부여한다.
== 연산자 : 주소값 비교
s1 == s2 => true;
s1 == s3 => false;
: s1, s2 는 같은 주소값을 가지므로 true, s3는 생성자선언을 통해 새로운 주소가 만들어진 것이므로 s1 == s3는 false이다.
equals() : 값 비교
s1.equals(s2) => true
s1.equals(s3) => true
: 세 변수 모두 변수값이 동일하다.