[JAVA] java.lang 패키지

6675 단어 Java객체지향Java

문자열 비교 ' == ' , ' equals() '

== : 연산자, 대상의 주소값을 비교 (숫자비교시 이용 / 문자가 같더라도 객체의 주소가 다르면 결과다름)
equals() : 메소드, 대상의 내용자체를 비교 (문자비교시 이용)

ex)
String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
String str4 = new String("abc");

<저장위치>
str1,str2 → "abc"(0x100)
str3 → "abc"(0x200)
str4 → "abc"(0x300)

<결과>
str1 == str2    ⇒ true
str1.equals(str2)  ⇒ true
str3 == str4     ⇒ false
str3.equals(str4) ⇒ true

hashcode()
해싱(hashing)기법에 사용되는 해시함수(hash function)을 구현한 것으로,
찾고자하는 값의 저장된 위치를 알려준다.
identityHashCode()
객체의 주소값으로 해시코드를 생성하기 때문에
모든 객체에 대해 항상 다른 해시코드값을 반환할 것을 보장한다.

→ 같은 객체일 경우 hashcode가 같지만 identityHashCode는 다르다.

toString()

인스턴스에 대한 정보를 문자열(String)로 제공할 목적으로 정의한 것이다.

  • Object로 부터 상속받은 toString()을 오버라이딩 하지않고 toString()을 호출하면, 클래스이름 + 16진수의 해시코드를 얻게된다.
  • Object 클래스에서 정의된 toString()의 접근제어자가 public 이므로, 새로운 클래스에서 오버라이딩 할때도 접근제어자를 public으로 한다.

String 클래스의 toString()은 String 인스턴스가 갖고 있는 문자열을 반환하도록 오버라이딩 되어 있다.
Date 클래스의 toString()은 Date 인스턴스가 갖고있는 날짜와 시간을 문자열로 변환하여 반환하도록 오버라이딩 되어 있다.

String 클래스

한번 생성된 String인스턴스가 갖고 있는 문자열을 읽어 올 수만 있고, 변경할 수는 없다.
+연산자를 이용해 문자열을 결합하는 경우 연산 시 마다 새로운 문자열이 담긴 String 인스턴스가 생성되어 메모리 공간을 차지하게 된다.

int compareTo(String str)            //  str과 사전순서로 비교한다. 같으면 0 사전순으로 이전이면 음수, 이후면 양수
String concat(String str)            //  str을 뒤에 덧붙인다
boolean equalsIgnoreCase(String str) //  대소문자 구분없이 비교
int indexOf(int ch)                  //  ch가 문자열에 존재하는지 확인하여 index를 알려준다. 못찾으면 -1 반환
String[] split(String regex)         //  지정된 분리자(regex)로 나누어 문자열 배열에 담아 반환한다.
String substring(int begin, int end) //  begin 부터 end 이전까지만 문자열로 반환
String trim()                        //  좌우 끝의 공백을 없앤다.

StringBuffer , StringBuilder

StringBuffer는 멀티쓰레드에 안전하게 동기화되어 있다. 동기화가 StringBuffer의 성능을 떨어뜨린다.
멀티쓰레드로 작성된 프로그램이 아닌경우, StringBuffer의 동기화는 불필요하게 성능만 떨어뜨리게 된다.
StringBuilder는 StringBuffer에서 쓰레드의 동기화만 뺀 것이다.
StringBuffer클래스는 equals메서드를 오버라이딩하지 않아서 equals를 사용해도 ==와 똑같은 결과가 나온다.

Wrapper 클래스

자바에서는 8개의 기본형을 객체로 다루지 않는데, 래퍼클래스를 이용하여 기본형 값을 객체로 다룰 수 있다.

문자열 → 기본형 : 타입.parse타입(String s)   ex) int i = Integer.parseInt("10")
문자열 → 래퍼클래스 : 타입.valueOf()      ex) Integer i = Integer.valueOf("10")
→ JDK1.5부터 오토박싱(autoboxing)으로 인해 둘의 차이가 없어졌다.

정규식(Regular Expression) - java.util.regex 패키지

정규식이란?
텍스트 데이터 중에서 원하는 조건에 일치하는 문자열을 찾아내기 위해 사용하는 것으로 미리 정의된 기호와 문자를 이용해서 작성한 문자열이다.

< 정규식 패턴>
c[a-z]* : c로 시작하는 영단어
c[a-z] : c로 시작하는 두자리 영단어
c[a-zA-z0-9] : c로 시작하고 숫자,영어로 조합된 두글자 (= c\w)

.* : 모든 문자열
c. : c로 시작하는 두자리 문자열
c* : c로 시작하는 모든 문자열(기호포함)
c. : c.와 일치하는 문자열 ( .은 패턴작성에 사용되는 문자로 escape문자와 같이 사용)
c[0-9] : c와 숫자로 구성된 두자리 문자열 (= c\d )
c.*t : c로 시작하고 t로 끝나는 문자열

[b|c].* : b또는 c로 시작하는 문자열 (= [bc].* [b-c].*)
[^b|c].* : b또는 c로 시작하지 않는 문자열 (= [^bc].* [^b-c].* )
[b|c].{2} : b또는 c로 시작하는 세자리 문자열

.*a.* : a를 포함하는 모든 문자열 ( *: 0또는 그이상의 문자)
.*a.+ : a를 포함하는 모든 문자열 ( + : 1또는 그이상의 문자, +는 *와 다르게 반드시 하나 이상의 문자가 있어야 한다.)

좋은 웹페이지 즐겨찾기