`
wlh269
  • 浏览: 455831 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

深入理解toString()

    博客分类:
  • J2SE
F# 
阅读更多
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()和Convert.ToString()的用法区别

    在本文中,我们将深入探讨这两种方法的用法和区别,以帮助开发者更好地理解和使用它们。 一、ToString()方法 ToString()方法是所有继承自Object类的对象都有的方法,包括基本数据类型和自定义类。它的主要作用是将...

    JavaScript Object toString 初始

    本篇文章我们将深入探讨`toString`方法的初始应用,以及它在JavaScript对象中的工作原理。 首先,`toString`方法是所有JavaScript对象的原型`Object.prototype`上的一个方法。这意味着,无论你创建何种类型的对象,...

    JavaScript Object toString 初始补充

    总的来说,通过深入理解并熟练运用`toString`方法,开发者可以更好地控制和展示JavaScript对象的信息,提高代码的可读性和调试效率。这篇博客文章可能是对这一关键知识点的深入探讨,对于任何想要提升JavaScript技能...

    万能的toString

    本文将深入探讨`toString()`方法,以及它在Java中的应用。 `toString()`方法是所有类(包括Object类)的成员方法,它的默认实现是返回类名加@加哈希值,例如`"java.lang.Object@123456"`。但通常我们都需要为自定义...

    JavaScript中valueOf函数与toString方法深入理解

    理解valueOf()和toString()的调用规则对于编写更高效的JavaScript代码至关重要,尤其是在处理自定义对象和类型转换时。在自定义对象上重写这些方法时,应确保它们的行为符合预期,以避免出现意外的结果。

    ToString格式大全

    ### ToString格式大全:深入解析与应用 在.NET框架下,`ToString`方法是任何对象用于将其自身转换为字符串表示的基本工具。特别是在C#和ASP.NET开发中,掌握`ToString`的高级格式化技巧对于实现数据的精准展示至关...

    深入理解Javascript中的valueOf与toString

    在JavaScript中,几乎所有的数据类型都具有两个重要的方法:valueOf()和toString()。...通过本文的介绍,希望能帮助大家更好地掌握valueOf()和toString()方法的使用,进一步加深对JavaScript语言的理解。

    C#中ToString格式大全

    在本文中,我们将深入探讨C#中的`ToString()`格式大全,学习如何用它来格式化输出,如将数字转化为货币格式(例如¥2.50)。 `ToString()`方法是所有类都继承自`System.Object`的成员,因此几乎所有的C#对象都可以...

    C#中ToString格式大全.docx

    这里我们将深入探讨`ToString()`的使用及其各种格式化选项。 `ToString()`方法可以接受一个可选的格式字符串作为参数,用于控制输出的格式。格式化字符串由一系列的代码组成,每个代码对应一种特定的输出样式。以下...

    C#示例:装箱、拆箱、自定义数据类型转换、ToString方法重载、类方法扩展

    在C#编程中,装箱、拆箱、自定义数据类型转换、ToString方法重载以及类方法扩展是几个核心概念,对于理解和优化程序性能至关重要。本文将深入探讨这些主题,并通过具体的实例来阐述它们的应用。 1. 装箱与拆箱 装箱...

    深入理解PHP原理之--echo的实现.pdf

    《深入理解PHP原理之--echo的实现》 在PHP编程中,`echo`是一个非常常见的命令,用于输出数据。然而,它并非一个传统意义上的函数,因为它没有返回值。要了解`echo`的内部机制,我们需要深入PHP的源代码。本文将...

    前端开源库-safe-tostring-pmb

    【标题】"前端开源库-safe-tostring-pmb"是一个专门针对前端开发的开源库,它的主要功能是提供一个安全的`...在实际应用中,开发者可以结合其源码,深入理解如何处理异常情况,提升自己在处理字符串转换时的技能。

    深入理解C#中的Delegate

    首先,让我们深入了解委托的工作原理。委托实际上是一个类,这个类实例化后可以代表一个方法。当创建一个委托实例时,你可以将其与一个或多个方法绑定。这可以通过直接指定方法名或者在创建时使用lambda表达式或匿名...

    得到计算机操作系统版本信息,VB.NET源代码编写Environment.OSVersion.ToString

    下面我们将深入探讨这个知识点。 首先,`Environment`类是System命名空间中的一个静态类,它提供了对环境变量、命令行参数和操作系统信息等系统级别的访问。`OSVersion`属性则是`Environment`类的一个成员,用于...

    深入理解JavaString#intern()内存模型Ja

    深入理解`String#intern()`方法对于优化内存使用和理解Java的内存模型至关重要。`intern()`方法是一个非常特殊的函数,它将字符串常量池(String Constant Pool)的概念引入到我们的讨论中。 字符串常量池是Java...

    全面解析JavaScript中的valueOf与toString方法(推荐)

    让我们深入了解一下在不同情况下的行为: 1. **比较操作**:在进行相等性检查时,比如`aaa &gt; 20`,JavaScript会尝试将`aaa`转换为数字来执行比较,因此会调用`valueOf`。如果`valueOf`返回的不是一个有效的数字,...

    深入理解JavaScript 函数

    方法&函数 区别 1.function 是更通用的概念,如数学、...3.toString 作用域 变量不是哪里都可以使用 全局变量(跨文件) var n = 1; function fn(){ console.log(n); // 1 } 局部变量(只能在函数内部访问) funct

    redacted-compiler-plugin,一个概念证明Kotlin编译器插件,它生成了经过编辑的toString()实现。.zip

    《深入理解redacted-compiler-plugin:Kotlin编译器插件的创新实践》 在现代软件开发中,Kotlin作为一种高效、简洁且富有表现力的编程语言,深受开发者喜爱。而`redacted-compiler-plugin`则是一个独特的开源项目,...

Global site tag (gtag.js) - Google Analytics