您的位置:首页 > 编程语言 > Java开发

Java 值类型与引用类型 神奇的toString()方法

2017-10-18 12:52 246 查看

一,前提

首先,Java中的类型分为值类型与引用类型,具体区别是:

值类型(如int、double)变量中保存的是值,例如
int i=1;
中,i保存的是1。

引用类型(如String)变量中保存的是地址,例如
String str="1";
中,str保存的并不是字符串1,而是该字符串在内存中的地址。

二,toString()是啥

OK,那么为啥System.out.println(i)就是输出i保存的内容,而System.out.println(str)输出str指向的地址的内容。

其实很简单,在System.out.println()函数执行时,如果发现参数是值类型,那就输出值,如果发现参数是引用类型,就会输出该参数的toString()方法。

那么toString()到底是啥,toString()实际上是定义在Object类中的方法, 而Object类是所有方法的基类,也就是说实际上所有的Java类都是继承这个类的。

例如你定义一个Student类,他就已经有.toString()方法了,原因就是继承自Object,而输出
org.maoge.demo.StudentDemo@4511e86f
这样形式的内容,就是Object基类定义的toString()方法的功能。

package org.maoge.demo;
public class StudentDemo {
public static void main(String[] args) {
StudentDemo sd=new StudentDemo();
System.out.println(sd.toString());//输出org.maoge.demo.StudentDemo@4511e86f
}
}


三,String方法的toString()

OK,既然Object类中的toString()方法输出
org.maoge.demo.StudentDemo@4511e86f
的内容,为啥String方法的toString()是输出字符串类型指向地址中保存的字符串呢,这是因为String方法中的toString()被重写了,重写后的功能就是输出地址中的字符串。

所以我们的Student类也可以重写toString(),然后成为我们想要的功能,例如:

package org.maoge.demo;
public class StudentDemo {
public String toString(){
return "StudentDemo是一个学生的示例";
}
public static void main(String[] args) {
StudentDemo sd=new StudentDemo();
System.out.println(sd.toString());//输出StudentDemo是一个学生的示例
}
}


四,System.out.println的相关

因为System.out.println能识别参数内容,然后对引用类型自动调用其toString()方法,所以无需在写
System.out.println(sd.toString())
,直接写
System.out.println(sd)
即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐