您的位置:首页 > 移动开发 > Objective-C

一个对象toString()方法如果没有被重写,那么默认调用它的父类Object的toString()方法,而Object的toString()方法是打印该对象的hashCode,一般hashCode就是此对象的内存地址

2015-07-17 16:06 1276 查看
昨天因为要从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()方法。

附上jdk中 Integer类 对toString重写源码:

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: