java实体类为什么要写.toString()方法

java实体类重写.toString()方法

1. 前言

笔者在做javaweb项目时候,使用SSM+maven+easyui,然后在写java实体类的时候,发现大家都要写tostring方法,那么为什么java实体类都要写.toString()方法?于是顺便在这里记录一下。

2. 了解

在Java中每个类都默认继承Object类,除非声明继承于某个类。
而toString 方法来自于Object 类,作用是:
返回一个字符串,是该Java对象的内存地址经过哈希算法得出的int类型的值在转换成十六进制。

    换句话说,该方法返回一个字符串,它的值大概就是等于:

   
   
  • 1

getClass().getName()+’@’+Integer.toHexString(hashCode())

这是一个内存地址经过哈希算法得出的int类型的值在转换成十六进制的东西。等同的看作Java对象在堆中的内存地址。
例如:

package com.zout.toString;  
public class Test {  
    public static void main(String[] args){  
        Object zt = new Object();  
        System.out.println(zt.toString());  
    }  
}  

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
输出结果:java.lang.Object@7852e922  

   
   
  • 1

这是直接使用tostring的时候返回的东西。

3. 实验

 那么在定义一个实体类后,不写tostring,返回的结果又会是什么呢?

   
   
  • 1

新建toStringTest.java:

package demoTest_zt;
/**
 *@class_name:toStringTest  
 *@param: java实体类重写tostring方法的测试
 *@return: 
 *@author:Zoutao
 *@createtime:2017年9月11日
 */
public class toStringTest {
    <span class="token keyword">private</span> String name<span class="token punctuation">;</span>
    <span class="token keyword">private</span> String sex<span class="token punctuation">;</span>
    <span class="token keyword">private</span> <span class="token keyword">int</span> No<span class="token punctuation">;</span>
    
    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">Show</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
        System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"这是没有tostring重写实体类的时候!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">public</span> String <span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> name<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setName</span><span class="token punctuation">(</span>String name<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">=</span> name<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">public</span> String <span class="token function">getSex</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> sex<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setSex</span><span class="token punctuation">(</span>String sex<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">this</span><span class="token punctuation">.</span>sex <span class="token operator">=</span> sex<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">public</span> <span class="token keyword">int</span> <span class="token function">getNo</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> No<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setNo</span><span class="token punctuation">(</span><span class="token keyword">int</span> no<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">this</span><span class="token punctuation">.</span>No <span class="token operator">=</span> no<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

再写一个Ceks_tostring.java主函数调用:

package demoTest_zt;
/**
 *@class_name:toStringTest  
 *@param: java实体类重写tostring方法的测试调用
 *@return: 
 *@author:Zoutao
 *@createtime:2017年9月11日
 */
public class Ceks_tostring {
	public static void main(String[] args) {
	    Class<?> demo= null;
	    try {
	    	//包-类路径   demo=Class.forName("demoTest_zt.Ceks_tostring");
	    } catch (ClassNotFoundException e) {
	        e.printStackTrace();
	    }
	    toStringTest test= new toStringTest();
	    test.setName("zout");
	    test.setNo(001);
	    test.setSex("man");
	    test.Show(); 
	    System.out.println("调用实体类返回的是:" +test);    
	}
}

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

运行结果:

这是没有tostring重写实体类的时候!
调用实体类返回的是:demoTest_zt.toStringTest@15db9742

 
 
  • 1
  • 2

很显然这要是在项目开发的时候,不应该是一串看不懂的数字,而应该是符合逻辑的东西;

接下来测试带有tostring方法的时候,Object中的toString方法就要被重写。
在toStringTest.java的最底下添加toString方法:

    //重写tostring方法
		@Override
		public String toString() {
			return "toStringTest [name=" + name + ", sex=" + sex + ", No=" + No + "]";
		} 

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

然后在运行主函数测试:
输出结果:

这是有tostring重写实体类的时候!
调用实体类返回的是:toStringTest [name=zout, sex=man, No=1]

 
 
  • 1
  • 2

返回的就是我们正常的业务代码。这也就是为什么我们在写java实体类的时候,往往要返回的是对象和值,所以习惯性都要加一个tostring方法的原因;

4. 总结

重写toString,object类里的toString只是把字符串的直接打印,数字的要转化成字符再打印,而对象,则直接打印该对象的hash码。

如果在类中没有重写ToString方法,默认使用的是Object的toString方法输出格式。这个时候,对象就会直接显示hash码。

如果在类中重写toString方法,那么输出格式就会按照我们定义的方式输出这个对象,因此可以这样理解:
重写toString是对对象在打印输出时候的一种格式化。这样做符合业务逻辑,显示结果人性化。
当你print一个对象是你需要这个对象在打印时展现的是什么形态你就把toString重写成你需要的返回形态。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值