=[String 클래스]=
오늘날 java를 많이 이용되는 이유중 하나가 문자열 처리가 쉽습니다. 쉽게 만들어주는 요소중에 하나인 String클래스에 대하여 살펴 보겠습니다
먼저 자바프로그램에 있는 문자열은 모두 String클래스의 객체로 표현됩니다
1)선언 및 초기화
String str = new String(Hello);
String클래스를 통해서 만들어진 객체를 그 생성자를 이용하여 string객체를 생성합니다
String str = new String();
str = “Hello”;
예제1)
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = new String("안녕하세요!! 자바");
//str = "안녕하세요!! 자바";
for(int i = 0; i < str.length();i++){
System.out.print(str.charAt(i));
}
}
출력 결과>> 안녕하세요!! 자바
str.charAt(i)
문자열을 배열처럼 사용하게 해줍니다
Q)3번의 선언시 객체가 3개 성성되는가?
str1 = new String(“Hello, JAva”);
str2 = new String(“Hello, JAva”);
str3 = new String(“Hello, JAva”);
class A extends Object{
}
public class StringTest1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
A a = new A();
System.out.println("a :" + a.hashCode());
A b = new A();
System.out.println("b :" +b.hashCode());
A c = new A();
System.out.println("c :" +c.hashCode());
String str1 = new String("Java");
System.out.println("str1 :" +str1.hashCode());
String str2 = new String("Java");
System.out.println("str2 :" +str2.hashCode());
String str3 = new String("Java");
System.out.println("str3 :" +str3.hashCode());
String str4 = new String("Java1");
System.out.println("str4 :" +str4.hashCode());
String str5 = new String("Java2");
System.out.println("str5 :" +str5.hashCode());
String str6 = new String("Java3");
System.out.println("str6 :" +str6.hashCode());
}
}
결과
a :12677476
b :33263331
c :6413875
str1 :2301506
str2 :2301506
str3 :2301506
str4 :71346735
str5 :71346736
str6 :71346737
해쉬값이 같다는 의미는 같은 개체라는 의미입니다 즉 하나의 객체를 공유해서 같이 사용하고 있습니다 단 문자열 내용이 같다면~~내용이 다르면 해쉬값도 달라집니다
참고>>
+str2.hashCode() 해쉬코드 출력
kr.ac.busanit.A@c17164(해쉬코드:객체가 가지고 있는 고유 ID값)
예제2)String선언시 2가지의 방법이 있는데 2가지 방법의 헤쉬값은 같을까 다를까
public static void main(String args[]) {
String str1 = "자바";
String str2 = "자바";
if (str1 == str2)
System.out.println("같음");
else
System.out.
println("다름");
}
같음!!
public static void main(String args[]) {
String str1 = new String("자바");
String str2 = new String("자바");
if (str1 == str2)
System.out.println("같음");
else
System.out.println("다름");
}
다름!!
str1은 객체가 만들어진 곳의 포인터입니다 처음은 같은곳을 가리키는데 2번째 같은경우는
String str1 = new String(“자바”) 선언시 만들어지는 곳은 heap메모리 상이 아니라 String상수영역에 “자바”라는 포인터위치를 가집니다 즉 heap영역에는 String의 주소값을 가지고 있습니다
str1 heap String
|#100| #100|#7070| #7070 |”자바”|
str2
|#500| #500|#7070|
str1
|#7070|
str2
|#7070|
String은
리터럴 상수이면 상수영역에 쓰여진다
StringBuffer 은 heap영역에 쓰게됩니다
다름을 같게 출력하기 위해서는 어떻게 해야하는가?
if (str1.equals(str2))
equal는 내용의 값을 같다는 것을 보는것이 아니라 해쉬코드의 값을 비교하여 비교합니다
'Daily Report' 카테고리의 다른 글
110819 c과제 ?곳 채워넣기 / API 1번예제 주석 달기 (0) | 2011.08.19 |
---|---|
110808 Java gui swing 기본 (0) | 2011.08.08 |
110725 일일보고서 java 객체지향의 구조 및 장점 (0) | 2011.07.25 |
110720 java 로컬변수 / fianl변수 (0) | 2011.07.20 |
110714 저수준함수 + 연결리스트 / at91sam7s CLCD세팅 (0) | 2011.07.14 |