在java中,如果一个对象未重写toString()方法,那么它将会调用父类的toString(),如果父类也没有重写这个方法,那么就迭代往上调用,直到Object的toString()方法。
我们在打印这个toStirng()方法的时候,会出现XXXX@e29820字样,那么@后面的值到底是什么呢,它是对象所在的内存地址么?下面我们来证明:
package oliver.examination.part1;
import java.util.ArrayList;
import java.util.List;
/**
<b>ObjectToStringTest。</b>
<p><b>详细说明:测试Object.toString</b></p>
<!-- 在此添加详细说明 -->
无。
<p><b>修改列表:</b></p>
<table width="100%" cellSpacing=1 cellPadding=3 border=1>
<tr bgcolor="#CCCCFF"><td>序号</td><td>作者</td><td>修改日期</td><td>修改内容</td></tr>
<!-- 在此添加修改列表,参考第一行内容 -->
<tr><td>1</td><td>Oliver</td><td>2010-11-26 下午04:33:22</td><td>建立类型</td></tr>
</table>
@version 1.0
@author Oliver
@since 1.0
*/
publicclass ObjectToStringTest {
/**
* 默认值。
*/
privatestaticfinalintSIZE=10000;
publicstaticvoid main(String[] args)
{
//创建列表存放对象
List<Object> list = new ArrayList<Object>();
int existNumber=0;
//新建SIZE个对象,如果toStirng代表的是内存地址,地址是不会重复的,
//那么list中应该不会存在重复的元素。
//list的大小应该为SIZE
for(int i=0;i<SIZE;i++){
Object obj = new Object();
if(list.contains(obj.toString())){
System.out.println("对象:"+obj.toString()+"已存在!");
existNumber++;
}else
list.add(obj.toString());
}
System.out.println("列表List的大小:"+list.size());
System.out.println("重复元素的个数:"+existNumber);
System.out.println("===============华丽的分割线===============");
//清空list
list.clear();
existNumber=0;
//新建一个对象的时候,变量名是对这个对象的应用(相当于对象的"地址")
//利用这个原理,我们再测试
for(int i=0;i<SIZE;i++){
Object obj = new Object();
if(list.contains(obj)){
System.out.println("对象:"+obj+"已存在!");
existNumber++;
}else
list.add(obj.toString());
}
System.out.println("列表List的大小:"+list.size());
System.out.println("重复元素的个数:"+existNumber);
}
}
运行结果如下:
对象:java.lang.Object@922804已存在!
对象:java.lang.Object@e29820已存在!
列表List的大小:9998
重复元素的个数:2
===============华丽的分割线===============
列表List的大小:10000
重复元素的个数:0
查看Object源代码:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
原来返回的是hashCode,而hashCode算法可能出现hash冲突,所以上面的重复情况了。
PS:如果没有出现重复情况,可以增大常量SIZE。
分享到:
相关推荐
37.返回字符串2在字符串1中出现的位置:String1.indexOf("String2")!=-1则说明没找到. 38.取字符串中指定位置的一个字符:StringA.charAt(9); 39.取出字符串中指定起点和终点的子字符串:stringA.substring(2,6); 40....
toString方法:表示返回对象的字符串表示形式 包名.类名@hashCode(内存地址) 打印对象时,默认调用 如果不是想使用object类,toString方法,可以重写此方法 equals方法 equals方法比较对象的是否相同 ==比较两个...
id="+this.DropDownList1.SelectIndex+"&id1="+...+"’)</script>") 接收参数: string a = Request.QueryString("id"); string b = Request.QueryString("id1"); 2.为按钮添加对话框 Button1.Attributes....
|--x.toString():用于把一个 Number 对象转换为一个字符串,并返回结果 19.正则表达式对象:(专门用于查找和验证) reg.test(‘要验证的完整字符串’)匹配返回true,否则返回false 强调:如果正则表达式使用了^和$...
16.lash能将ASCII代码转换成对应的字符,也可以返回字符对应的ASCII码。Chr表示什么? A. 转换ASCII码为字符 B. 转换字符为ASCII码 C. 转换字符为海明码 D. 转换海明码为字符 17.Flash 菜单File→Print的快捷...
这个特殊的RegExp对象和所有以字母"s"结尾的字符串都匹配.用RegExp()也可以定义 一个等价的正则表达式,代码如下: var pattern = new RegExp("s$"); 无论是用正则表达式直接量还是用构造函数RegExp(),创建一个...
答:string str = null 是不给他分配内存空间,而string str = \"\" 给它分配长度为空字符串的内存空间。 25.请详述在dotnet中类(class)与结构(struct)的异同? 答:Class可以被实例化,属于引用类型,是分配在内存的...
在前端和后端进行数据传输的时候这种格式也是很受欢迎的,后端返回json格式的字符串,前台使用js中的JSON.parse()方法把JSON字符串解析为json对象,然后进行遍历,供前端使用。 下面进入正题,介绍在JAVA中JSON和...
id="+this.DropDownList1.SelectIndex+"&id1="+...+"')</script>") 接收参数: string a = Request.QueryString("id"); string b = Request.QueryString("id1"); 2.为按钮添加对话框 传送参数: response.write...
(1) ///fw对象在构造时,传递相关服务类型的数据,与连接字符串 public fw(string fwlx, string Connectionstring) {……} (2)// 判断此类型的助词窗体相同的服务类型的实例是否运行,在创建实例前时行判断,没有...
* 返回真正连接成的字符串 */ StringBuffer.prototype.toString = function(){ return this._strings_.join(""); } /** * 清空 */ StringBuffer.prototype.removeAll = function(){ this._strings_...
正切 返回 e 的指定次幂 对数 数字 x 的 y 次幂 返回较大者 第3页 C#(WINFORM)学习 Math.Min(x,y) 返回较小者 枚举型 一般为字符串,可以定义带数字的枚举型,示例为: enum Color { Red=1, Blue=2, Green=3 } ...
defaultValue,第一种用法不给缺失的变量指定默认值,表明默认值是空字符串,长度为0的集合,或者长度为0的Map对象. 使用!指定默认值时,并不要求默认值的类型和变量类型相同.使用??运算符非常简单,它总是返回一个布尔值...
listFiles() 返回 File[],包含子文件、子目录的 File 对象 list(FilenameFilter) listFiles(FilenameFilter) listFiles(FileFilter) 只列出符合过滤条件的文件、目录...
如果此字符串是空字符串,则返回的数组为空且 长度为零。 (2)Convert 类的ToChar 方法 Convert 类的ToChar 方法用来将指定的值转换为Unicode 字符,该方法为可重载方法,本实例中用到的它 的重载形式如下: public...
//数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库. public static string connectionString = PubConstant.ConnectionString; public DbHelperSQL() { } #region 公用...
* 将一个xml字符串解析成Document对象。 * * @param xmlStr * 要被解析的xml字符串。 * @param encoding * 字符串的编码。 * @return 返回解析后的Document对象。 * @throws IOException * 如果...
•Object 类提供的toString方法总是返回该对象实现类的类名 + @ +hashCode值。 •==和equals比较运算符:==要求两个引用变量指向同一个对象才会返回true。equals方法则允许用户提供自 定义的相等规则。 •...
通过一个URLConnection或者一个保存有网页内容的字符串来初始化Parser,或者使用静态函数来生成一个Parser对象。 ParserFeedback的代码很简单,是针对调试和跟踪分析过程的,一般不需要改变。而使用Lexer???? ...
三目(三元)运算符 :?: 1、语法 条件?表达式1:表达式2; 条件是一个boolean类型的数据,如果条件结果为true,则执行表达式1的内容,并将表达式1的结果作为整体表达式的结果。如果条件为false,则执行表达式2的...