String, Wrapper 클래스

String 클래스

  • 선언
    String str1 = new String("abc"); : 인스턴스로 생성됨
    String str2 = "abc"; : 상수풀에 있는 문자열을 가리킴

//psvm

String str1 = new String("abc");
String str2 = new String("abc");

System.out.println(str1 == str2); //false

String str3 = "abc";
String str4 = "abc";

System.out.println(str1 == str2); //true

생성자로 생성한 String객체는 각각의 다른 힙메모리 주소를 점유하고 있기 때문에 false 를 반환한다.

하지만 바로 문자열을 대입한 String 객체는 상수풀에 있는 같은 위치를 가리키기 때문에 true를 반환한다.

equals로 비교하면 둘다 true반환한다.

  • String은 Immutable 한번 선언되거나 생성된 문자열을 변경할 수 없음
    String 클래스의 concat()메소드 혹은 “+” 를 이용하여 String을 연결하는 경우 새 로 생성된 문자열이다.

StringBuilder, StringBuffer

  • 가변적인 char[]배열을 멤버변수라 가지고 있는 클래스 (mutable)
  • 문자열을 변경하거나 연결하는 경우 사용하면 편리
  • StringBuffer는 멀티 쓰레드프로그래밍에서 동기화가 보장됨
    단일 쓰레드 프로그래밍에서는 StringBuilder를 사용하는 것이 더 좋다.
  • toString()메소드로 String반환
//psvm
String java = new String("java");
String android = new String("android");

StringBuilder buffer = new StringBuilder(java);
buffer.append(android);

java = buffer.toString();

buffer의 메모리 주소값은 계속 동일하다. mutable이기 때문이다.

Wrapper 클래스

기본형 Wrapper클래스
boolean Boolean
byte Byte
char Character
short Short
int Integer
long Long
float Float
double Double
  • 기본형을 클래스로 감싸서 사용할 수 있도록 함.
  • 자바 초기에는 기본형과 wrapper클래스와 호환이 되지 않았음(auto-un|boxing)

제네릭 프로그래밍

  • 변수나 매개변수를 여러 자료형으로 변환될 수 있도록 하는 프로그래밍 방식
  • 실제 사용되는 참조 자료형으로의 변환은 컴파일러가 검증
  • 제네릭 매개변수의 유효범위는(Scope) 지역변수와 같다.
public class GenericPrinter<T extends Material> { //제네릭 클래스
  private T material; //제네릭 타입 변수

  public void setMaterial(T material) {
    this.material = material;
  }

  public T getMaterial(){ //제네릭 메소드
    return material;
  }
}