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)即可。
相关文章推荐
- 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
- 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
- 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
- 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
- 深入理解Java 8 Lambda(lambda,方法引用,目标类型和默认方法)
- java :引用类型的转换  方法重载和重写  构造函数 修饰符
- Java方法中引用类型的形参传递问题
- Java Lambda(语言篇——lambda,方法引用,目标类型,默认方法,函数接口,变量捕获)
- 【转载】深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
- JavaScript引用类型之Array数组的toString()和valueof()方法的区别
- java 引用类型作为方法参数使用问题
- 不应该在ToString()方法中修改引用类型
- 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法
- 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
- 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
- 用类名做方法的返回值类型 在学习Java的初始阶段,很多同学使用基本数据类型定义变量和引用类型定义变量以及使用类名做方法的返回值类型常常不知所以。今天我以自己的解读方式和个人的理解作一个简单的解释,和
- Java:方法与引用类型
- java方法传递引用、传递基本类型
- java为什么不能在静态域或方法中引用类型变量?
- java中“==”和equals方法的区别,再加上特殊的String引用类型