<기록용 post>
private static void f5() {
byte[] bytes = { -20, -107, -120, -21, -123, -107 };
String str = null; // String이 초기화 되지 않았기 때문에 null로 설정
try {
str = new String(bytes,"UTF-8"); // UTF-8은 글자를 3byte로 처리함.
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("str: " + str);
String str1 = "오늘은 월요일";
try {
byte[] arr = str1.getBytes("UTF-8");
System.out.println(arr.length);
System.out.println(Arrays.toString(arr));
String str2 = new String(arr,"UTF-8");
System.out.println(str2);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
String이 편리하지만 StringBuilder를 이용해서 가변문자열을 처리해준다.
메모리 효율성에도 도움이 된다.
private static void f6() {
// String은 고정문자열이다. +는 연결연산자로 문자열을 만들면 새로운 메모리에 문자열을 만들고 주소변경
// StringBuilder는 가변문자열, 변경이 잦으면 String보다 빠름.
long start1 = System.nanoTime();
String str1 = "";
for(int i=1; i<= 100; i++) {
str1 += i;
}
long end1 = System.nanoTime();
System.out.println(end1-start1);
long start = System.nanoTime();
StringBuilder str2 = new StringBuilder();
for(int i=1; i<= 100; i++) {
str2.append(i);
}
long end = System.nanoTime();
System.out.println(end-start);
}
"," 기준으로 String data를 나눠서 출력하는 코드
split함수를 사용하면 배열로 받기 때문에 배열 처리
배열은 toString을 해야 출력값을 얻을 수 있음.
private static void f7() {
String data = "아이디,이름,패스워드";
StringTokenizer st = new StringTokenizer(data,",");
while(st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
System.out.println("===end");
String[] arr = data.split(",");
System.out.println(Arrays.toString(arr));
}
Integer 객체
Integer obj1 = new Integer(100); 는 사용 안함. // 단 객체인 거는 알아야 주소 비교인지 내용 비교인지 확인 가능.
private static void f8() {
Integer obj1 = 100; // 127까지는 상수 pool
Integer obj2 = 100;
Integer obj3 = 300; // AutoBoxing new Integer(300)
Integer obj4 = 300; // AutoBoxing new Integer(300)
System.out.println( obj1 == obj2 ); //주소비교
System.out.println( obj3 == obj4 ); //주소비교
System.out.println(obj1.equals(obj2)); //내용비교
System.out.println(obj3.equals(obj4));
}