`
ol_beta
  • 浏览: 287750 次
  • 性别: 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。

分享到:
评论

相关推荐

    JavaScript中的Object对象学习教程_.docx

    2. `Object.prototype.toString()`:返回对象的字符串表示。在进行字符串连接时,JavaScript会自动调用此方法。 利用`toString`方法,我们可以推断值的类型。例如,`Object.prototype.toString.call(value)`可以...

    superObject.rar

    3. 生成JSON字符串:使用`ToString`方法将JSON对象转换为字符串,便于存储或传输。例如: ```delphi var JSONObj: ISuperObject; begin JSONObj := SO.Create; JSONObj.AsObject['name'] := 'John'; JSONObj.As...

    js代码-Object.prototype.toString

    在JavaScript中,`Object.prototype.toString`是一个非常重要的内置方法,它返回一个表示该对象的字符串。这个方法在很多场合下都被广泛使用,特别是在确定对象类型或者进行类型检查时。我们来详细了解一下`toString...

    JavaScript Object toString 初始补充

    `toString`方法的默认行为是返回一个表示对象类型的字符串,如`"[object Object]"`。但这个方法是可以被重写的,以便在特定的对象类型上提供更具体的信息。 这篇名为“JavaScript Object toString 初始补充”的博客...

    用于java对象与json对象间的相互转换(net.sf.json.JSONObject)

    `fromObject`方法将Java对象转换为`JSONObject`,然后调用`toString()`将其转化为JSON字符串。 ### 进阶使用 - **处理嵌套结构**:`JSONObject`也支持嵌套结构,即JSON对象内包含其他JSON对象或数组。可以通过递归...

    C#.net常用函数和办法集

    4. `.Length` 属性:对于字符串类型,`.Length`返回字符串的字符数: ```csharp string str = "中国"; int length = str.Length; // 2 ``` 5. `Encoding.Default.GetBytes()`:将字符串转换为字节数组: ```...

    js常用方法大全,比较详细

    类型转换方法包括 `toString()` 和 `Number()` 等,用于将数据转换成字符串或数值。 二、操作符 JS 提供了多种操作符,如算术操作符(+,-,*,/,%),比较操作符(==,===,!=,!==),逻辑操作符(&&,||,!),...

    c#.net常用函数和方法集

    - `变量.Length`:返回字符串的长度,例如`string str="中国"; int Len = str.Length;`。 - `System.Text.Encoding.Default.GetBytes(变量)`:将字符串转换为字节数组,如`byte[] bytStr = System.Text.Encoding....

    ajax json java 用法 json 将List、Object转换为Json格式字符串

    ### AJAX JSON Java 用法:将 List 和 Object 转换为 Json 格式字符串 在现代 Web 开发中,Ajax(Asynchronous JavaScript and XML)技术被广泛应用于创建交互式的 Web 应用程序。其中,JSON(JavaScript Object ...

    c#.net常用的小函数和方法集.docx

    4. `Length`属性:对于字符串,`Length`属性返回字符串的字符数。如`string str = "中国"; int len = str.Length;`,这里的`len`将被赋值为2。 5. `Encoding.Default.GetBytes(变量)`:这个方法将字符串转换为字节...

    C3常用的Api软件

    `System.Text.Encoding.Default.GetBytes(str)` 返回字符串str的字节表示,你可以通过 `.Length` 获取字节数。 6. `System.Text.StringBuilder` 类:当你需要频繁拼接字符串时,应使用 `StringBuilder`,因为它更...

    107个常用javascript语句

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

    api_object.zip_API_java_lipsziy

    开发者可能会在 `Person` 类中重写 `toString()` 方法,以便当这个对象被转换为字符串时,能返回一个有意义的表示,比如包含该人姓名和年龄的字符串。 `toString()` 方法是 `Object` 类的一个重要成员,它的默认...

    C#知识点汇总,重要的C#知识点

    4. 字符串相加:使用(+)操作符,任何其他对象与字符串相加都会自动调用 `ToString()` 5. 字符串存储:str1 = “111”; str2 = “111”,str1 和 str2 指向同一地址 6. 字符串比较:只要 str1 和 str2 内容相同,...

    ASP.NET网络编程中经常用到的27个函数集

    4. `.Length`:对于字符串类型,这个属性返回字符串的长度,例如 `str.Length` 返回字符串str的字符数量。 5. `System.Text.Encoding.Default.GetBytes()`:此方法将字符串转换为字节数组。例如,`System.Text....

    javascript小结

    - **valueOf()** 和 **toString()**:都用于返回字符串对象的原始字符串值。 - **indexOf(substring)**:返回子字符串首次出现的位置。 - **lastIndexOf(substring)**:返回子字符串最后一次出现的位置。 - **slice...

    302.300.JAVA基础教程_面向对象(中)-Object类综合练习(302).rar

    1. `toString()`方法:这是`Object`类的一个重要方法,用于返回对象的字符串表示。默认的`toString()`方法返回的是类名加上@后跟对象哈希码的十六进制形式。通常,我们会在自定义类中覆盖这个方法,以提供更具体的...

    asp.net函数集.doc

    4. `.Length`:对于字符串类型,`.Length`属性返回字符串的字符数量。例如,`string str = "中国"; int length = str.Length;`将获取字符串"中国"的长度。 5. `System.Text.Encoding.Default.GetBytes()`:这个方法...

    C#开发常用方法整理

    `System.Text.Encoding.Default.GetBytes(str)`会返回字符串str的默认编码字节数组,可以进一步获取比特长度。 6. **StringBuilder 类**:用于构建和操作字符串。与使用"+"连接字符串相比,StringBuilder更高效。...

Global site tag (gtag.js) - Google Analytics