Java에서 String을 출력하면 그대로 담긴 문자열을 출력한다.
String s01="Java";
String s02=new String("월요일");
System.out.println(s01); //JAVA
System.out.println(s02); //월요일
하지만 기본적으로 객체는 출력하면 주소값이 나오게 된다.
ObjectExam oe1=new ObjectExam();
ObjectExam oe2=new ObjectExam("안녕");
System.out.println(oe1); // 주소값
System.out.println(oe2); // 주소값
왜 String은 주소값이 안 나오는걸까?
사실 s01, s02, oe1, oe2 전부 주소값이다.
println(Object obj) 메소드는 인수로 객체가 전달되면 obj.toString() 자동으로 호출하기 때문에 toString이 리턴하는 값을 출력한다.
Object
toString() : 객체의 주소를 하나의 String으로 만들어서 리턴
getClass().getName() + ‘@’ + Integer.toHexString(HashCode())
String은 toString 메소드를 오버라이딩해서 String 자신을 반환했기 때문에 주소가 아닌 문자열이 출력된 것이다.
따라서 다른 객체도 toString을 오버라이딩하면 주소가 아닌 다른 값을 바로 출력할 수 있다.
public ObjectExam {
String s;
public ObjectExam(){}
public ObjectExam(String s){
this.s = s;
}
@Override
public String toString(){
return s;
}
}
이렇게 toString을 오버라이딩해준다면 ObjectExam은 출력했을 때 바로 s를 출력한다.
ObjectExam oe1 = new ObjectExam("안녕");
ObjectExam oe2 = new ObjectExam("안녕하세요");
System.out.println(oe1); // 안녕
System.out.println(oe2); // 안녕하세요
'개발 > JAVA' 카테고리의 다른 글
[JAVA] 제한자 static / final / abstract (0) | 2023.03.29 |
---|---|
[JAVA] System.currentTimeMillis()와 System.nanoTime()으로 시간 측정하기 (0) | 2023.03.29 |
댓글