to string ,equals方法的重写

一个类对象作为参数传入到System.out.println()中时会调用这个对象的toString()方法,如果没有重写toString()方法的话,调用的就是Object类的toString()方法,那么输出信息没有实际意义。还有在debug时候中也会用到这个方法,但作用不大。

调用对象的equals()方法时会调用hashcode()这个方法,如果不重写hashcode()的话一般达不到想要的效果

以下部分转载自点击打开链接

先来说说重写tostring() 很简单如果完全没有看过的 可以看一下 如果知道就不用看了 呵呵 因为很简单我们直接来看代码   呵呵

 

复制代码
  
  
class Shape { private string input; public string Input { get { return input; } set { input = ( string .IsNullOrEmpty(value) ? " No " : value); } } private string sex; public string Sex { get { return sex; } set { sex = ( string .IsNullOrEmpty(value) ? " " : value); } } public override string ToString() { return string .Format( " Hello {0} You Sex is {1} " , input,sex); } }
复制代码

因为每个类如果不设置继承的父类都会默认继承System.Object类所以直接 override tostring()方法 就可以重写 tostring() 了 是不是很简单呢  接下来我们再来说说 重写Equals()方法 这个方法是用来比对2个值是不是同一个对象的 首先我们来看看 下面这段代码

 

复制代码
  
  
static void Main( string [] args) { Shape sp = new Shape(); sp.Input = " Man " ; sp.Sex = " " ; Console.WriteLine(sp.ToString()); Shape sp2 = sp; sp2.Sex = " " ; Console.WriteLine( sp2.Equals(sp)); }
复制代码

这段代码 首先会输出 Hello Man You Sex is 男 然后会输出一个TRUE 因为 sp2 其实就是sp 他们引用的是同一个对象,那么如果我们现在不想这么做 我们想通过 input 和 sex来判断是不是相同 怎么做呢? 可以看看下面这段代码 从刚才的代码上扩充

 

复制代码
  
  
class Shape { private string input; public string Input { get { return input; } set { input = ( string .IsNullOrEmpty(value) ? " No " : value); } } private string sex; public string Sex { get { return sex; } set { sex = ( string .IsNullOrEmpty(value) ? " " : value); } } public override string ToString() { return string .Format( " Hello {0} You Sex is {1} " , input,sex); } public override bool Equals( object obj) { Shape s = obj as Shape; bool b = false ; if (s != null ) { if ( this .input == s.input && this .sex == s.sex) { b = true ; } else { b = false ; } } else { Console.WriteLine( " You input is error! " ); } return b; // return base.Equals(obj); } public override int GetHashCode() { return this .ToString().GetHashCode(); } }
复制代码

这里 我们 override 了Equals方法 然后用AS 做了一个类型转换as 关键字 在做转换时 如果对象不可以被转换 则会返回NULL 其它的代码应该 一眼就能看出来了 最后 如果重写Equals方法 就要把 GetHashCode 也一起重写 获取散列值的方法很多 最简单的就是 tostring().gethashcode() 然后看看怎么调用

 

复制代码
  
  
static void Main( string [] args) { Shape sp = new Shape(); sp.Input = " Man " ; sp.Sex = " " ; Shape sp3 = new Shape(); sp3.Input = " Man " ; sp.Sex = " " ; Console.WriteLine(sp3.Equals(sp)); }
复制代码
虽然 这是2个对象 但最后还是会返回true 因为我们重写Equals方法 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值