본문 바로가기

Daily Report

110727 Java String 클래스


=[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는 내용의 값을 같다는 것을 보는것이 아니라 해쉬코드의 값을 비교하여 비교합니다