수업시간에 문자열 계산기를 만들고 있습니다. ("3, 4")라고 입력값을 넣으면 ,을 기준으로 3과 4로 나눈 후 덧셈을 진행합니다. String[] something_Split = something.split(",");
나눈 값들이 잘 저장되어있는지 궁금해서 전체를 출력해보니 [3, 4]이렇게 출력될 줄 알았는데, [Ljava.lang.String;@5422fe09 이렇게 뜨네요. 왜 그런걸까요 ? 주소값을 나타내게 되는건가요?
System.out.println(something_Split); //출력값 [Ljava.lang.String;@5422fe09
System.out.println(something_Split[0]); //출력값 3
System.out.println(something_Split[1]); //출력값 4
System.out.println(something_Split[2]); // 출력값 없음
public class calculator {
public int add(String something) {
if (something.isEmpty()){
return 0;
}
String[] something_Split = something.split(",");
int result = Integer.parseInt(something_Split[0]) + Integer.parseInt(something_Split[1]);
System.out.println(something_Split);
System.out.println(something_Split[0]);
System.out.println(something_Split[1]);
System.out.println(something_Split[2]);
return result;
}
}
4개의 의견 from SLiPP
C를 배울 때도 배열 자체를 출력하면 뭐가 찍힐까? 배열 자체를 찍으면 메모리상에서 배열이 시작하는 시작 위치를 의미하듯이 자바에서도 배열이 위치하는 시작 위치에 대한 메모리 주소를 출력하게 된다.
그렇다면 값을 가지는 객체는 어떨까? String도 하나의 객체인데 값이 출력되는 이유는 String이 toString()이라는 메소드를 가지기 때문이다. String 클래스 소스 코드 열어서 toString()이 있는지 확인해 봐라. 객체 자체도 toString() 메소드를 구현하지 않으면 현재 객체가 가리키고 있는 주소를 출력하게 된다. toString()과 관련해서는 추후에...
흥미롭네요. toString() 이 메소드를 호출하지도 않았는데 어떻게 호출되고 있는지, 그럼 실제로 구현된 클래스엔 toString() 메소드가 없는데 어떻게 jvm이 이해하고 있는지. java는 메모리를 숨겨놓았는데 어떻게 노출되었는지. 상속, 최상위 클래스란 개념과 존재 이유, override, pass by value, pass by reference 까지 줄줄 훑어볼 수 있는 얘기가 되겠네요... 아 어렵다 @_@;;; 고수분들 도와주세요 ㅠ
Java API문서를 확인(추적조사)해 보는 습관이 필요합니다.
System 클래스부터 추적해서, out의 자료형이 PrintStream 클래스 이므로, http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/System.html
PrintStream의 클래스의 println(Object x) 메소드를 조사해 봅니다. [http://docs.oracle.com/javase/1.5.0/docs/api/java/io/PrintStream.html#println(java.lang.Object)](http://docs.oracle.com/javase/1.5.0/docs/api/java/io/PrintStream.html#println(java.lang.Object))
이문서를 바탕으로 조사하면 print(Object x) 메소드가 나오고, [http://docs.oracle.com/javase/1.5.0/docs/api/java/io/PrintStream.html#print(java.lang.Object)](http://docs.oracle.com/javase/1.5.0/docs/api/java/io/PrintStream.html#print(java.lang.Object))
이를 조사하면, String 클래스의 valueof(Object x) 메소드가 나옵니다. [http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#valueOf(java.lang.Object)](http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#valueOf(java.lang.Object))
문서를 읽어보면, Object 클래스의 toString()메소드가 나옵니다.
자바지기님 말씀처럼 원론이고 규정 문제입니다. 고민할 문제는 아니신 듯....
'오실장'을 부르면 그냥 나를 가리키는 의미지만 (즉, 오실장이라는 단순한 값이 아니라 어딘가 있을 오실장을 가라키는...) '오', '실', '장'은 단순한 문자 값이죠. 헉... 더 이상한 답변인가요.
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.