`
ol_beta
  • 浏览: 282108 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Object.toString()返回字符串的意义:对象名+@+对象内存地址?

    博客分类:
  • java
阅读更多

在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。

分享到:
评论

相关推荐

    107个常用javascript语句

    37.返回字符串2在字符串1中出现的位置:String1.indexOf("String2")!=-1则说明没找到. 38.取字符串中指定位置的一个字符:StringA.charAt(9); 39.取出字符串中指定起点和终点的子字符串:stringA.substring(2,6); 40....

    javaee_tedu_day09.zip

    toString方法:表示返回对象的字符串表示形式 包名.类名@hashCode(内存地址) 打印对象时,默认调用 如果不是想使用object类,toString方法,可以重写此方法 equals方法 equals方法比较对象的是否相同 ==比较两个...

    ASP.NET程序中常用的三十三种代码.txt

    id="+this.DropDownList1.SelectIndex+"&id1="+...+"’)&lt;/script&gt;")  接收参数: string a = Request.QueryString("id"); string b = Request.QueryString("id1");  2.为按钮添加对话框 Button1.Attributes....

    JavaScript笔记

    |--x.toString():用于把一个 Number 对象转换为一个字符串,并返回结果 19.正则表达式对象:(专门用于查找和验证) reg.test(‘要验证的完整字符串’)匹配返回true,否则返回false 强调:如果正则表达式使用了^和$...

    flash shiti

    16.lash能将ASCII代码转换成对应的字符,也可以返回字符对应的ASCII码。Chr表示什么? A. 转换ASCII码为字符 B. 转换字符为ASCII码 C. 转换字符为海明码 D. 转换海明码为字符 17.Flash 菜单File→Print的快捷...

    正则表达式

    这个特殊的RegExp对象和所有以字母"s"结尾的字符串都匹配.用RegExp()也可以定义 一个等价的正则表达式,代码如下: var pattern = new RegExp("s$"); 无论是用正则表达式直接量还是用构造函数RegExp(),创建一个...

    net学习笔记及其他代码应用

    答:string str = null 是不给他分配内存空间,而string str = \"\" 给它分配长度为空字符串的内存空间。 25.请详述在dotnet中类(class)与结构(struct)的异同? 答:Class可以被实例化,属于引用类型,是分配在内存的...

    json相关jar包.zip

    在前端和后端进行数据传输的时候这种格式也是很受欢迎的,后端返回json格式的字符串,前台使用js中的JSON.parse()方法把JSON字符串解析为json对象,然后进行遍历,供前端使用。 下面进入正题,介绍在JAVA中JSON和...

    ASP.NET常用代码

    id="+this.DropDownList1.SelectIndex+"&id1="+...+"')&lt;/script&gt;") 接收参数: string a = Request.QueryString("id"); string b = Request.QueryString("id1"); 2.为按钮添加对话框 传送参数: response.write...

    HGHdll 2.0

    (1) ///fw对象在构造时,传递相关服务类型的数据,与连接字符串 public fw(string fwlx, string Connectionstring) {……} (2)// 判断此类型的助词窗体相同的服务类型的实例是否运行,在创建实例前时行判断,没有...

    jsvm2框架源码

    * 返回真正连接成的字符串 */ StringBuffer.prototype.toString = function(){ return this._strings_.join(""); } /** * 清空 */ StringBuffer.prototype.removeAll = function(){ this._strings_...

    C# for CSDN 乱七八糟的看不懂

    正切 返回 e 的指定次幂 对数 数字 x 的 y 次幂 返回较大者 第3页 C#(WINFORM)学习 Math.Min(x,y) 返回较小者 枚举型 一般为字符串,可以定义带数字的枚举型,示例为: enum Color { Red=1, Blue=2, Green=3 } ...

    freemarker总结

    defaultValue,第一种用法不给缺失的变量指定默认值,表明默认值是空字符串,长度为0的集合,或者长度为0的Map对象. 使用!指定默认值时,并不要求默认值的类型和变量类型相同.使用??运算符非常简单,它总是返回一个布尔值...

    IO输入输出留

    listFiles() 返回 File[],包含子文件、子目录的 File 对象 list(FilenameFilter) listFiles(FilenameFilter) listFiles(FileFilter) 只列出符合过滤条件的文件、目录...

    c# 加密和解密相关代码

    如果此字符串是空字符串,则返回的数组为空且 长度为零。 (2)Convert 类的ToChar 方法 Convert 类的ToChar 方法用来将指定的值转换为Unicode 字符,该方法为可重载方法,本实例中用到的它 的重载形式如下: public...

    CMS.DBUtility.dll

    //数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库. public static string connectionString = PubConstant.ConnectionString; public DbHelperSQL() { } #region 公用...

    android xml文件操作

    * 将一个xml字符串解析成Document对象。 * * @param xmlStr * 要被解析的xml字符串。 * @param encoding * 字符串的编码。 * @return 返回解析后的Document对象。 * @throws IOException * 如果...

    【05-面向对象(下)】

    •Object 类提供的toString方法总是返回该对象实现类的类名 + @ +hashCode值。 •==和equals比较运算符:==要求两个引用变量指向同一个对象才会返回true。equals方法则允许用户提供自 定义的相等规则。 •...

    HttpClient以及获取页面内容应用

    通过一个URLConnection或者一个保存有网页内容的字符串来初始化Parser,或者使用静态函数来生成一个Parser对象。 ParserFeedback的代码很简单,是针对调试和跟踪分析过程的,一般不需要改变。而使用Lexer???? ...

    javascript入门笔记

    三目(三元)运算符 :?: 1、语法 条件?表达式1:表达式2; 条件是一个boolean类型的数据,如果条件结果为true,则执行表达式1的内容,并将表达式1的结果作为整体表达式的结果。如果条件为false,则执行表达式2的...

Global site tag (gtag.js) - Google Analytics