티스토리 뷰
19차인 오늘은 String 객체와 Sorting에 대해서 학습했다.
new 키워드를 사용 안 하고 String 리터럴로 표현할 경우 String Constant Pool 영억에 존재한 후 해당 영역의 값을 가리키게 된다.
new 키워드를 사용할 경우에는 heap영역에 String 객체를 생성하게 되는 것이다.
출처 : https://brunch.co.kr/@kd4/1
Java String을 잘 아신다고 생각하시나요?
Java String의 속성에 관하여 | 아래 자바 코드는 몇 개의 오브젝트를 생성할까요? String str1 = new String("gabbar");String str2 = new String("gabbar");String str3 = "gabbar"; 그리고 아래 코드가 실행된 결괏값은 어떨
brunch.co.kr
intern() 메소드를 사용하면 Heap 영역에 있는 인스턴스를 String Constant pool 영역으로 이동시킨다.
public class String_17 {
public static void main(String[] args) {
String str_1 = "AAA";
String str_2 = new String("AAA");
if(str_1 == str_2) {
System.out.println("str_1 == str_2 = true");
}else
System.out.println("str_1 == str_2 = false");
System.out.println();
System.err.println("str_1 " + System.identityHashCode(str_1));
System.err.println("str_2 " + System.identityHashCode(str_2));
str_2 = str_2.intern();
// intern() 메소드는, 새롭게 만들어진
// String객체를 상수화 시켜 줍니다.
// 만들어진 String 객체가 이미 상수로 만들어진 문자열이라면,
// 지금 만들어진 놈을 버리고, 상수를 가리키게 합니다.
// 즉, Heap에 새롭게 만들어진 객체를 버리고,
// 상수를 재활용하도록 하게 하는 것이죠.
System.out.println("intern() 메소드 호출후 \n");
if(str_1 == str_2) {
System.out.println("str_1 == strf_2 = true");
}else
System.out.println("str_1 == strf_2 = false");
System.err.println(System.identityHashCode(str_1));
System.err.println(System.identityHashCode(str_2));
}
}
str_1 "AAA"는 String Pool에 존재하고 있고, str_2 "AAA"는 Heap 영역에 존재한다.
intern() 메서드를 통해 str_2를 Heap 영역에서 String Constant pool 영역으로 이동시키고 이후에
str_1과 str_2를 비교 분석해보면 같은 identityHashCode를 가지고 있는것을 알 수 있다.
다음은 substring, charAt, indexOf를 이용한 문자열 추출이다.
substring(int start) : 현재 문자열 객체 start위치부터 끝까지 문자열 발췌.
substring(int start, int end) : 현재 문자열 객체에서 start 부터 end 직전까지 문자열 발췌
charAt(int location) : 현재 문자열 객체에서 해당위치의 문자값 1개를 발췌, 반환값은 char 형
int indexOf(int ch) : 현재 문자열 객체에서 ch문자가 첫번째로 발견된 위치를 반환, 없으면 -1 반환
int indexOf(String str) : 현재 문자열 객체에서 str을 찾아서 존재하면 첫째문자 위치를 반환하고 없으면 -1 반환
public class Main {
public static void main(String[] args) {
String[] fullName = {"Korea.java", "seoul.com", "abc12345.789", "789asd.xyz", "king.queen"};
for(int i = 0;i < fullName.length;i++) {
int index = fullName[i].indexOf('.');
String filename = fullName[i].substring(0, index);
String ext = fullName[i].substring(index, fullName[i].length());
System.out.println("filename is " + filename);
System.out.println("ext is " + ext);
}
}
}
마지막으로는 Selection Sort이다. 정렬 알고리즘의 기초가 되는 Selection Sort이다.
public class Main {
public static void main(String[] args) {
String[] eng = {"사랑", "자바", "Love", "LOVE", "愛"};
System.out.println("*********************Before Sorting*****************************");
for(int i = 0; i < eng.length; i++) {
System.out.print(eng[i] + "\t");
}
for(int i = 0;i < eng.length-1;i++) {
for(int j = i+1;j < eng.length;j++) {
if(eng[i].compareTo(eng[j]) < 0) {
String temp = eng[i];
eng[i] = eng[j];
eng[j] = temp;
}
}
}
System.out.println();
System.out.println("*********************After Sorting*****************************");
for(int i = 0; i < eng.length; i++) {
System.out.print(eng[i] + "\t");
}
}
}
'back > Java' 카테고리의 다른 글
KH 21일차(ArrayList, HashSet, Queue, Stack) (0) | 2022.07.28 |
---|---|
KH 20일차(StringBuffer, Vector, ArrayList, StringTokenizerTest) (1) | 2022.07.27 |
KH 18일차(Wrapper class) (0) | 2022.07.25 |
KH 17일차(Thread로 ATM 예제[Synchronization]) (0) | 2022.07.24 |
KH 16일차 (Thread, Runnable) (0) | 2022.07.21 |