在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。
分享到:
相关推荐
2. `Object.prototype.toString()`:返回对象的字符串表示。在进行字符串连接时,JavaScript会自动调用此方法。 利用`toString`方法,我们可以推断值的类型。例如,`Object.prototype.toString.call(value)`可以...
3. 生成JSON字符串:使用`ToString`方法将JSON对象转换为字符串,便于存储或传输。例如: ```delphi var JSONObj: ISuperObject; begin JSONObj := SO.Create; JSONObj.AsObject['name'] := 'John'; JSONObj.As...
`fromObject`方法将Java对象转换为`JSONObject`,然后调用`toString()`将其转化为JSON字符串。 ### 进阶使用 - **处理嵌套结构**:`JSONObject`也支持嵌套结构,即JSON对象内包含其他JSON对象或数组。可以通过递归...
在JavaScript中,`Object.prototype.toString`是一个非常重要的内置方法,它返回一个表示该对象的字符串。这个方法在很多场合下都被广泛使用,特别是在确定对象类型或者进行类型检查时。我们来详细了解一下`toString...
`toString`方法的默认行为是返回一个表示对象类型的字符串,如`"[object Object]"`。但这个方法是可以被重写的,以便在特定的对象类型上提供更具体的信息。 这篇名为“JavaScript Object toString 初始补充”的博客...
4. `.Length` 属性:对于字符串类型,`.Length`返回字符串的字符数: ```csharp string str = "中国"; int length = str.Length; // 2 ``` 5. `Encoding.Default.GetBytes()`:将字符串转换为字节数组: ```...
类型转换方法包括 `toString()` 和 `Number()` 等,用于将数据转换成字符串或数值。 二、操作符 JS 提供了多种操作符,如算术操作符(+,-,*,/,%),比较操作符(==,===,!=,!==),逻辑操作符(&&,||,!),...
### AJAX JSON Java 用法:将 List 和 Object 转换为 Json 格式字符串 在现代 Web 开发中,Ajax(Asynchronous JavaScript and XML)技术被广泛应用于创建交互式的 Web 应用程序。其中,JSON(JavaScript Object ...
4. `Length`属性:对于字符串,`Length`属性返回字符串的字符数。如`string str = "中国"; int len = str.Length;`,这里的`len`将被赋值为2。 5. `Encoding.Default.GetBytes(变量)`:这个方法将字符串转换为字节...
`System.Text.Encoding.Default.GetBytes(str)` 返回字符串str的字节表示,你可以通过 `.Length` 获取字节数。 6. `System.Text.StringBuilder` 类:当你需要频繁拼接字符串时,应使用 `StringBuilder`,因为它更...
37.返回字符串2在字符串1中出现的位置:String1.indexOf("String2")!=-1则说明没找到. 38.取字符串中指定位置的一个字符:StringA.charAt(9); 39.取出字符串中指定起点和终点的子字符串:stringA.substring(2,6); 40....
开发者可能会在 `Person` 类中重写 `toString()` 方法,以便当这个对象被转换为字符串时,能返回一个有意义的表示,比如包含该人姓名和年龄的字符串。 `toString()` 方法是 `Object` 类的一个重要成员,它的默认...
4. 字符串相加:使用(+)操作符,任何其他对象与字符串相加都会自动调用 `ToString()` 5. 字符串存储:str1 = “111”; str2 = “111”,str1 和 str2 指向同一地址 6. 字符串比较:只要 str1 和 str2 内容相同,...
- **valueOf()** 和 **toString()**:都用于返回字符串对象的原始字符串值。 - **indexOf(substring)**:返回子字符串首次出现的位置。 - **lastIndexOf(substring)**:返回子字符串最后一次出现的位置。 - **slice...
1. `toString()`方法:这是`Object`类的一个重要方法,用于返回对象的字符串表示。默认的`toString()`方法返回的是类名加上@后跟对象哈希码的十六进制形式。通常,我们会在自定义类中覆盖这个方法,以提供更具体的...
`System.Text.Encoding.Default.GetBytes(str)`会返回字符串str的默认编码字节数组,可以进一步获取比特长度。 6. **StringBuilder 类**:用于构建和操作字符串。与使用"+"连接字符串相比,StringBuilder更高效。...