class A{int i;}
public class VarArgs{
static void f(Object[] x){
for(int i=0;i<x.length;i++)
System.out.println(x[i]);
}
public static void main(String[] args){
f(new Object[]{
new Integer(47),new VarArgs(),
new Float(3.14),new Double(11.11)});
f(new Object[]{"one","two","three"});
f(new Object[]{new A(),new A(),new A()});
}
}
运行结果为:
47
VarArgs@1ba34f2
3.14
11.11
one
two
three
A@13f5d07
A@f4a24a
A@cac268
===============
我对此代码的理解:
java使用new objectname()创建了该对象的引用。每一个对象都从Object继承一个toString()方法。当使用System.out.println输出一个引用的时候实际上调用了该对象的toString()方法。对于没有toString方法的类,println则输出该实例的“地址”。
在打印的时候,如果你在你的代码中没有重载toString()方法,那么java将自动调用object的toString()方法,而object的toString()方法一般就是打印某个对象的地址,所以诸如这里的class A,由于你没有重载toString()方法,所以调用object的toString()方法,打印了地址。而对于某些类,
诸如这里的Integer,Float,Double对象,由于java已经在Double重写了toString(),虽然你没有再次重写,但它还是会根据Double里已经存在的toString()方法打印了
danceflash对此代码中输出地址的不同理解
关于调用object的toString()方法这一点上完全同意
但是要注意的是:
打印出来的"A@13f5d07"并非他的"地址",而是对象的所属类以及该对象的哈希值
以下是Object类的toString()方法的代码:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
其中:
getClass().getName()返回对象所属类的类名
hashCode()返回该对象的哈希值
Integer.toHexString(hashCode())将对象的哈希值用16进制表示
因此最后得到了这样的结果:A@13f5d07
==================================
下面给出另外一个例子:
public class B
{
public String toString()
{
return "This is a ";
}
}
public class A
{
public static void main(String[] args)
{
System.out.println(new B());
}
}
输出结果:This is a
理解:因为在B中已经声明了toString方法,实际是对toString方法进行了重载了,此时System.out.println(object)会自动调用该object的toString方法输出。
java中任何class都是默认从Object扩展而来,都有一个toString()方法,System.out.println(object)会默认调用这个object的toString方法,如果在class里面,重写了这个toString()方法,也就是说那么输出的时候,调用的toString方法就是class中所定义的了。
其实,System.out.println()的参数就是string ,他会把其中的参数转换为string类型,给你重写tostring方法,所以当把new b()转化成string时,将调用tostring 函数,而此时调用的就是你定义的函数。
例子3:
public class TestToString {
public static void main(String[] args) {
System.out.println("d:=" +new Dog());
Dog d1=new Dog();
Dog d2=new Dog();
Dog d3=new Dog();
System.out.println(d1+" "+d2);
}
}
class Dog {
public String toString() {
System.out.println("###");
return "I'm a cool dog!";
}
}
输出结果:
###
d:=I'm a cool dog!
###
###
I'm a cool dog! I'm a cool dog!
分享到:
相关推荐
在本文中,我们将深入探讨这两种方法的用法和区别,以帮助开发者更好地理解和使用它们。 一、ToString()方法 ToString()方法是所有继承自Object类的对象都有的方法,包括基本数据类型和自定义类。它的主要作用是将...
本篇文章我们将深入探讨`toString`方法的初始应用,以及它在JavaScript对象中的工作原理。 首先,`toString`方法是所有JavaScript对象的原型`Object.prototype`上的一个方法。这意味着,无论你创建何种类型的对象,...
总的来说,通过深入理解并熟练运用`toString`方法,开发者可以更好地控制和展示JavaScript对象的信息,提高代码的可读性和调试效率。这篇博客文章可能是对这一关键知识点的深入探讨,对于任何想要提升JavaScript技能...
本文将深入探讨`toString()`方法,以及它在Java中的应用。 `toString()`方法是所有类(包括Object类)的成员方法,它的默认实现是返回类名加@加哈希值,例如`"java.lang.Object@123456"`。但通常我们都需要为自定义...
理解valueOf()和toString()的调用规则对于编写更高效的JavaScript代码至关重要,尤其是在处理自定义对象和类型转换时。在自定义对象上重写这些方法时,应确保它们的行为符合预期,以避免出现意外的结果。
### ToString格式大全:深入解析与应用 在.NET框架下,`ToString`方法是任何对象用于将其自身转换为字符串表示的基本工具。特别是在C#和ASP.NET开发中,掌握`ToString`的高级格式化技巧对于实现数据的精准展示至关...
在JavaScript中,几乎所有的数据类型都具有两个重要的方法:valueOf()和toString()。...通过本文的介绍,希望能帮助大家更好地掌握valueOf()和toString()方法的使用,进一步加深对JavaScript语言的理解。
在本文中,我们将深入探讨C#中的`ToString()`格式大全,学习如何用它来格式化输出,如将数字转化为货币格式(例如¥2.50)。 `ToString()`方法是所有类都继承自`System.Object`的成员,因此几乎所有的C#对象都可以...
这里我们将深入探讨`ToString()`的使用及其各种格式化选项。 `ToString()`方法可以接受一个可选的格式字符串作为参数,用于控制输出的格式。格式化字符串由一系列的代码组成,每个代码对应一种特定的输出样式。以下...
在C#编程中,装箱、拆箱、自定义数据类型转换、ToString方法重载以及类方法扩展是几个核心概念,对于理解和优化程序性能至关重要。本文将深入探讨这些主题,并通过具体的实例来阐述它们的应用。 1. 装箱与拆箱 装箱...
《深入理解PHP原理之--echo的实现》 在PHP编程中,`echo`是一个非常常见的命令,用于输出数据。然而,它并非一个传统意义上的函数,因为它没有返回值。要了解`echo`的内部机制,我们需要深入PHP的源代码。本文将...
【标题】"前端开源库-safe-tostring-pmb"是一个专门针对前端开发的开源库,它的主要功能是提供一个安全的`...在实际应用中,开发者可以结合其源码,深入理解如何处理异常情况,提升自己在处理字符串转换时的技能。
下面我们将深入探讨这个知识点。 首先,`Environment`类是System命名空间中的一个静态类,它提供了对环境变量、命令行参数和操作系统信息等系统级别的访问。`OSVersion`属性则是`Environment`类的一个成员,用于...
深入理解`String#intern()`方法对于优化内存使用和理解Java的内存模型至关重要。`intern()`方法是一个非常特殊的函数,它将字符串常量池(String Constant Pool)的概念引入到我们的讨论中。 字符串常量池是Java...
让我们深入了解一下在不同情况下的行为: 1. **比较操作**:在进行相等性检查时,比如`aaa > 20`,JavaScript会尝试将`aaa`转换为数字来执行比较,因此会调用`valueOf`。如果`valueOf`返回的不是一个有效的数字,...
方法&函数 区别 1.function 是更通用的概念,如数学、...3.toString 作用域 变量不是哪里都可以使用 全局变量(跨文件) var n = 1; function fn(){ console.log(n); // 1 } 局部变量(只能在函数内部访问) funct
《深入理解redacted-compiler-plugin:Kotlin编译器插件的创新实践》 在现代软件开发中,Kotlin作为一种高效、简洁且富有表现力的编程语言,深受开发者喜爱。而`redacted-compiler-plugin`则是一个独特的开源项目,...
本教程将深入探讨如何使用`ToString()`方法与不同的参数来实现数字、日期和时间格式的枚举格式。 首先,我们来看日期和时间的格式化。在C#中,我们可以使用`DateTime`结构的`ToString()`方法来定制日期和时间的显示...