대상 tostring () 방법이 다시 쓰여지지 않으면 부모 Object의 tostring () 방법을 기본적으로 호출하고, Object의 tostring () 방법은 대상의hashCode를 출력합니다. 일반적으로hashCode는 대상의 메모리 주소입니다.

2533 단어 HashCode
어제 JFrame 컨트롤에서 비밀번호를 얻으려고 했는데, 문제는 toString 방법으로 얻은 것이 반드시 당신이 원하는 것이 아니라는 것이다. 아래와 같다.
jPasswordField는 JFrame의 암호 입력 상자입니다. 다음 방법으로 암호의value를 얻을 수 없습니다.
jPasswordField.getPassword().toString();

이것은 jPasswordField 때문이다.getPassword () 는 문자 그룹 char[]를 얻은 다음에 tostring 방법을 호출하면 이 문자 그룹의hashCode, 즉 문자 그룹의 메모리 주소를 얻을 수 있습니다.
아래의 방법만 이 char[] 대상을 String 대상으로 바꿀 수 있습니다.
String s = new String(jp2_jpf.getPassword()); 

왜 그런 걸까요?
 
먼저 다음 예를 살펴보십시오.
String s="abcd";
char[] c=s.toCharArray();
String s1=new String(c);// String , s1
String s2=c.toString();// toString() , s2

s1, s2의 값은 다르다. s1의 값은 abcd이고 s2의 값도 String이지만 대상 c의hashCode일 뿐이다.toSting 방법은 기본적으로 현재 대상의hashCode, 즉 메모리 주소를 되돌려줍니다.
요약: 대상 tostring () 방법이 다시 쓰여지지 않으면 부모 Object의 tostring () 방법을 기본적으로 호출하고, Object의 tostring () 방법은 대상의hashCode를 출력합니다. 일반적으로hashCode는 이 대상의 메모리 주소입니다.
 
밤을 하나 더 들다.
      
 Integer a=10;
 String s=a.toString();

s의value는 10입니다. 이것은 Integer가 toString () 방법을 다시 썼기 때문입니다.
 
ToString에 대한 jdk의 Integer 클래스 재작성 소스를 첨부합니다.
    public String toString() {
        return toString(value);
    }  
    public static String toString(int i) {
        if (i == Integer.MIN_VALUE)
            return "-2147483648";
        int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
        char[] buf = new char[size];
        getChars(i, size, buf);
        return new String(buf, true);
    }  

 

좋은 웹페이지 즐겨찾기