티스토리 뷰

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");
		}
		
		
		
		
	}
}

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크