- 참조 자료형
ex:) String, BigDecimal...
Animal dog = new Animal()
에서 dog
는 Stack에 new Animal()
은 Heap에 저장됨
- 이때,
dog
에 대한 값은 Heap에 저장된 new Animal()
의 주소(참조, reference)
Animal dog = new Animal(); // 1C
Animal cat;
cat = dog; // 1C
cat.id = 10;
System.out.println(dog.id); // 10
- 위 경우, dog에 대한 참조 변수의 주소가 cat의 값으로 복사된다
- 따라서, cat에 저장된 값은 dog에서도 참조할 수 있다
int i = 5;
int j = 5;
System.out.println(i==j); // true
Animal dog = new Animal(15);
Animal dog2 = new Animal(15);
System.out.println(dog==dog2) // false
- 기본 변수는 같은 값을 가지면 같다는 결과가 나온다
- 참조 변수는 같은 값을 가져도 주소(참조 객체)가 다르기 때문에 다르다는 결과가 나온다
"Test".length()
==> 4
- String은 참조 자료형
- String 클래스의 메서드를 사용할 수 있다
- 생성자가 필요없다는 특징(BigDecimal과 비교)
String str = "Test"
- Test에 대한 인스턴스를 생성하고 레퍼런스(주소)를 str에 저장
.charAt()
- 인자는 인덱스
- 인덱스에 해당하는 글자를 가지고 온다
.substring()
- 인자는 인덱스
- 인자로 받은 인덱스부터 마지막 인덱스까지
- 리스트 슬라이싱과 유사한 기능
String someString = "This is a lot of text";
for(int i=0; i<someString.length();i++)
{
System.out.println(someString.charAt(i));
}
.indexOf()
- 인자는 String / char
- target String에 인자에 넣은 String이 포함되어 있으면 해당 String이 시작되는 인덱스 리턴
- 마지막 인덱스는
.lastIndexOf()
.contains()
- 인자는 String
- 인자에 넣은 String 존재 여부 리턴(boolean)
.startsWith()
- 인자는 String
- target String의 시작 String이 인자와 같은지 여부
- 끝 String:
.endsWith()
.equalsIgnoreCase()
- 인자는 String
- 대소문자 상관 없이 같은 문자열이면 true 리턴
.concat
- String 두 개 합치기
- 원본 String을 바꾸지 않는다
.toUpperCase()
/ .toLowerCase()
- 불변성
- 클래스 인스턴스는 메모리에 생성된 이후에는 어떠한 방식으로도 변경되지 않는다
- concat
- string + string = stringstring
- string + int = stringint
1 + 2 + "3" = "33"
.join()
- 구분자, 글자
- 구분자 뒤에 나열된 인자들을 구분자로 구분하여 문자열 생성
String.join(",","A","B")
=> "A,B"
- StringBuffer / StringBuilder
- 문자열을 이어붙일 때, 각 문자열마다 인스턴스가 생성되고 더한 문자열을 다른 문자열에 더할 때도 인스턴스가 계속 생성된다 -> 낭비
- StringBuffer를 활용하여 위 문제 해결 가능
- StringBuffer는 가변형
- 동기화된 클래스
- 멀티 스레딩이 가능한 클래스
- 속도가 느려질 수 있다
- StringBuilder로 대체
StringBuffer sb = new StringBuffer("Test");
sb.append("123"); // "Test123"
sb.setCharAt(1,'E'); // "TEst123"
- Wrapper Classes
- int -> Integer
- char -> Character
- 추가적인 옵션을 제공한다
String -> int
Integer hundred = Integer.valueOf("100");
Float floatWrapper = Float.valueOf(57.0f);
int floatToInt = floatWrapper.intValue(); // 57
- Wrapper class의 불변성
- 두 개의 다른 참조 값이 하나의 객체를 가리키고 있다고 해도 문제 없다
- 재사용 가능
- 매번 새로운 객체를 생성(new)하지 않아도 된다
- 메서드는 Heap 안에 존재하는 기존 객체를 재사용할 수 있기 때문
// 생성자로 정수 생성
Integer i1 = new Integer(5);
Integer i2 = new Integer(5);
i1 == i2 // false
// 메서드로 정수 생성
Integer i3 = Integer.valueOf(5);
Integer i4 = Integer.valueOf(5);
i3 == i4 // true
- Auto Boxing
- 자바 5에 추가된 기능
- syntactic sugar
Integer seven = Integer.valueOf(7);
Integer seven = 7; // auto boxing
Integer sevenAgain = 7;
seven == sevenAgain; // true
- Joda Time Framework
- LocalDate
- LocalTime
- LocalDateTime
- 날짜 + 시간
- 2022년 9월 1일 오후 9시 13분
.now()
- 현재 날짜, 시간
- 뒤에 메서드를 붙여 연도, 요일, 날짜 구할 수 있다
- ex:)
LocalDate.now().getYear()
- 마우스 오른쪽 클릭 -> Open Type Hiearchy