`
huanglz19871030
  • 浏览: 248780 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

深入理解tostring

F# 
阅读更多

深入理解toString()

关键字: 深入理解tostring()

Java代码

1.   class A{int i;}   

2.     

3.   public class VarArgs{   

4.     static void f(Object[] x){   

5.       for(int i=0;i<x.length;i++)   

6.         System.out.println(x[i]);   

7.     }   

8.     public static void main(String[] args){   

9.       f(new Object[]{   

10.          new Integer(47),new VarArgs(),   

11.          new Float(3.14),new Double(11.11)});   

12.      f(new Object[]{"one","two","three"});   

13.      f(new Object[]{new A(),new A(),new A()});   

14.    }   

15.  }  

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将自动调用objecttoString()方法,而objecttoString()方法一般就是打印某个对象的地址,所以诸如这里的class A,由于你没有重载toString()方法,所以调用objecttoString()方法,打印了地址。而对于某些类,诸如这里的IntegerFloatDouble对象,由于java已经在Double重写了toString()虽然你没有再次重写,但它还是会根据Double里已经存在的toString()方法打印了

danceflash对此代码中输出地址的不同理解 ,关于调用objecttoString()方法这一点上完全同意
但是要注意的是:
打印出来的"A@13f5d07"并非他的"地址",而是对象的所属类以及该对象的哈希值

以下是Object类的toString()方法的代码:
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

其中:

getClass().getName()
返回对象所属类的类名

hashCode()
返回该对象的哈希值

Integer.toHexString(hashCode())
将对象的哈希值用16进制表示


因此最后得到了这样的结果:
A@13f5d07

==================================

下面给出另外一个例子:

Java代码

1.   public class B    

2.   {   

3.     public String toString()   

4.     {   

5.       return "This is a ";   

6.     }   

7.   }   

8.   public class A   

9.   {   

10.     public static void main(String[] args)    

11.     {   

12.       System.out.println(new B());   

13.     }   

14.  }  

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)会自动调用该objecttoString方法输出。

java
中任何class都是默认从Object扩展而来,都有一个toString()方法,System.out.printlnobject)会默认调用这个objecttoString方法,如果在class里面,重写了这个toString()方法,也就是说那么输出的时候,调用的toString方法就是class中所定义的了。
其实,System.out.println()的参数就是string ,他会把其中的参数转换为string类型,给你重写tostring方法,所以当把new b()转化成string时,将调用tostring 函数,而此时调用的就是你定义的函数。
例子3

Java代码

1.     

2.   public class TestToString {   

3.       public static void main(String[] args) {   

4.              

5.           System.out.println("d:=" +new Dog());   

6.           Dog d1=new Dog();   

7.           Dog d2=new Dog();   

8.           Dog d3=new Dog();   

9.           System.out.println(d1+" "+d2);   

10.      }   

11.  }   

12.    

13.  class Dog {   

14.      public String toString() {   

15.          System.out.println("###");   

16.          return "I'm a cool dog!";   

17.      }   

18.  }  

 

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`上的一个方法。这意味着,无论你创建何种类型的对象,...

    万能的toString

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

    JavaScript Object toString 初始补充

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

    C# Tostring格式

    根据提供的信息,我们可以深入探讨C#中的`ToString`方法及其格式化选项,这对于处理和展示数值数据至关重要。本文将详细解析各种格式字符串的用途,并通过示例代码来具体说明每种格式的效果。 ### 1. 概述 在C#中...

    ToString格式大全

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

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

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

    C#中ToString格式大全

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

    C#中ToString格式大全.docx

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

    深入理解Javascript中的valueOf与toString

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

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

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

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

    在VB.NET编程环境中,获取计算机的操作系统版本信息是一项常见的任务,这对于开发跨平台或...了解如何利用这个方法以及解析其返回的信息,可以帮助我们更好地理解和适应各种运行环境,提高应用程序的稳定性和兼容性。

    前端开源库-safe-tostring-pmb

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

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

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

    javascript使用中为什么10..toString()正常而10.toString()出错呢

    之前也看到过JavaScript的这个问题,但是没有深入了解,今天在StackOverflow上看到了答案,感觉不错,记下来分享给大家。问题的描述是这样的: 代码如下: console.log(10..toString());//10 console.log(10....

    C#_数字格式日期时间格式枚举格式[ToString(给不同参数)].

    本教程将深入探讨如何使用`ToString()`方法与不同的参数来实现数字、日期和时间格式的枚举格式。 首先,我们来看日期和时间的格式化。在C#中,我们可以使用`DateTime`结构的`ToString()`方法来定制日期和时间的显示...

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

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

    排骨工具箱之一:万能toString

    在Java开发中,经常需要打印对象的详细信息,以便于调试和理解程序的运行状态。`toString()`方法就是这样一个关键的工具,它能将对象的状态转化为字符串形式。 `ToStringUtil`类通常包含一系列静态方法,这些方法...

Global site tag (gtag.js) - Google Analytics