一个对象toString()方法如果没有被重写,那么默认调用它的父类Object的toString()方法,而Object的toString()方法是打印该对象的hashCode,一般hashCode就是此对象的内存地址
2015-07-17 16:06
1276 查看
昨天因为要从JFrame控件获取密码,注意到一个问题,那就是用toString方法得到的不一定是你想要的,如下:
jPasswordField是JFrame中的密码输入框,如果用下面的方法是得不到密码的value的:
这是因为jPasswordField.getPassword()得到的是字符数组char[],然后调用toString方法得到的是这个字符数组的hashCode,即字符数组的内存地址。
只有用下面的方法才能把这个 char[] 对象转为 String 对象。
这是为什么呢?
先看下面的例子:
s1、s2的值是不一样的,s1的值是“abcd”,s2的值虽然也是String,但是它只是对象c的hashCode。因为toSting方法默认返回当前对象的hashCode,即内存地址。
总结:一个对象toString()方法如果没有被重写,那么默认调用它的父类Object的toString()方法,而Object的toString()方法是打印该对象的hashCode,一般hashCode就是此对象的内存地址!
再举个栗子:
s的value是10,这是因为Integer重写了toString()方法。
附上jdk中 Integer类 对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); }
相关文章推荐
- 关于Object-C 底层实现self isa 的理解
- iOS中id与NSObject* 和id<NSObject>的区别
- 问题-Error creating object. Please verify that the Microsoft Data Access Components 2.1(or later) have been properly installed.
- 问题-[ACCESS2007]怎么显示MsysObjects
- iOS指纹识别Object-C语言
- doppia object_detection代码配置
- 教程-delphi的开源json库:superobject,用法简介
- 【iOS】Objective-C简约而不简单的单例模式
- Object-C中使用NSKeyedArchiver归档(将各种类型的对象存储到文件中)
- 在servlet中使用json-lib报错--java.lang.NoClassDefFoundError: net/sf/json/JSONObject
- (转)C#4.0的dynamic和var及object关键字辨析
- Objective-C method XXX conflicts with optional requirement method XXX
- Objective-C中的NSValue的详解
- animation之objectAnimator
- SelectObject
- java 后台使用gson 将json字符串转换为List<Map<String,object>> 数组
- Objective-C学习备忘录:Clang编译器编译运行Objective-C代码
- 第5章分布式系统模式 在 .NET 中使用 DataSet 实现 Data Transfer Object
- 第5章分布式系统模式 在 .NET 中使用 DataSet 实现 Data Transfer Object
- Object之克隆对象clone 和__clone()函数