学习Java,容易被你忽略的小细节(3)
在《学习Java,容易被你忽略的小细节(2)》中我们已经深入讨论过String类中equals()方法的使用,在本文中我们将进一步讨论equals()方法在其他境况下的使用方法。
首先,我们先提供一个网址http://docs.oracle.com/javase/7/docs/api/,长期从事Java程序设计的程序员都知道这个网址。没错这里展示的就是Oracle公司提供的Java API的技术文档,以后大家如果在Java程序设计时遇到什么问题基本都可以在这里找到答案。
大家都知道Java中根类是Object,在Java中每一个类都来源与java.lang.Object类。所以熟悉Object类提供的方法是非常重要的,这样才能在自己定义的类中使用它们。本文中我们仅讨论Object中equals()方法。
Object类中默认实现equals()方法的语句如下:
public boolean equals(Object o)
{
return (this == o)
}
显然,在Object类中使用equals()方法等价于使用==运算符,难道Java语言设计者闲的没事做定义了一个没用的方法吗?很明显这是不可能的,于是我们想测试一下在自定义类中equals()方法是否也等价于==运算符呢?
测试代码:
public class Student{
String name;
int age;
String sex;
Student(String n,int a,String s){
name = n;
age = a;
sex = s;
}
public static void main(String[] args){
Student s1 = new Student("zhang",20,"male");
Student s2 = new Student("zhang",20,"male");
if(s1.equals(s2))
System.out.println("s1.equals(s2) 结果为true");
else
System.out.println("s1.equals(s2) 结果为false");
}
}
显然s1和s2内容相同,但是并非同一对象。下面我们看一下运行结果:
从运行结果上我们可以看出的确在自定义类中equals()方法也等价于==运算符,这是怎么一回事呢?
但是我们来仔细回想一下String类中equals()方法调用的结果,很明显与我们上面做的测试不符。很多聪明的读者大概猜到是String类对equals()方法进行了覆盖。其实,在很多情况下程序员都会在自定义的类中覆盖equals()方法,使其变成用来判断对象内容是否相等的方法。这也是学习Java程序设计应该熟练掌握的技巧之一。
下面提供Student类中equals()方法的具体实现。
public boolean equals(Object o)
{
if(o instanceof Student) //判断o是否是Student类
{
Student s = (Student)o; //强制类型转换
return this.name.equals(s.name) &&
this.age == s.age &&
this.sex.equals(s.sex);
}
else
{
return false;
}
}
测试结果:
经过上面覆盖我们自定义的类中的equals()方法就可以实现类似String类中equals()方法的功能,用来判断对象内容是否相同了。
下面再介绍一个有关equals()方法使用常见的集中错误:
//No1
String s1;
String s2 = new String();
s1.equals(s2); //这时s1为null,程序编译时抛出异常NullPointerException
上面就是学习Java,容易被你忽略的小细节(3)。
欢迎继续关注本博更多新鲜动向,博主QQ:2584451009,有什么建议和忠告欢迎评论或留言。
学习Java,容易被你忽略的小细节(3)的更多相关文章
- 学习Java,容易被你忽略的小细节(2)
昨天心情真的太糟糕了,写完<学习Java,值得注意你注意的问题(1)>之后,迎来些许的支持以后就是一片片的谴责.我的主页上涌现出许许多多Java方面的牛人,谴责我水平太低,写的问题太初级. ...
- 学习Java,值得你留意的问题(1)更名为《学习Java,容易被你忽略的小细节(1)》
记得大二快要结束的时候,有个女孩子突然问我“你会Java吗,帮我做大作业好吗?” 实话说,那个女孩真的很漂亮,我当时也非常想帮她.但是我从来没有接触过Java,让我在短短的几天内完成Java程序设计课 ...
- java 性能优化:35 个小细节,让你提升 java 代码的运行效率
前言 代码 优化 ,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没 ...
- JAVA性能优化:35个小细节让你提升java代码的运行效率
代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是, ...
- java中的@Override标签,小细节大作用
转载:http://www.cnblogs.com/octobershiner/archive/2012/03/09/2388370.html 一般用途 ...
- Java生鲜电商平台-关于学习生鲜电商平台的思考(小程序/APP)
Java生鲜电商平台-关于学习生鲜电商平台的思考(小程序/APP) 说明:最近群里面的一个网友问的一个问题,让我陷入了深思,他问的问题很基础也很真实,"大佬,你们是怎么学习的呢?" ...
- 系统学习 Java IO (一)----输入流和输出流 InputStream/OutputStream
目录:系统学习 Java IO ---- 目录,概览 InputStream 是Java IO API中所有输入流的父类. 表示有序的字节流,换句话说,可以将 InputStream 中的数据作为有序 ...
- 从零开始学习JAVA(入门基础)
目录 博主从零开始学习JAVA(入门基础) 1.搭建JAVA开发环境 卸载JDK(未安装的请忽略) 安装JDK 2.编程语言中,何为编译型与解释型 编译型 解释型 3.第一个JAVA应用程序 4.JA ...
- 论新手该如何学习java?
由于我国高等教育制度教材陈旧,加上java自身发展不过十年左右的时间,还有一个很重要的原因就是java这门语言更适合商业应用,所以高校里大部分博士老师们对此语言的了解甚至不比本科生多. 在这种环境下, ...
随机推荐
- 五笔字根--good
https://gss0.baidu.com/94o3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/4b90f603738da977b1b5ce57b251f8198 ...
- 【64.22%】【codefoces round 382A】Ostap and Grasshopper
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- java做微信支付notify_url异步通知服务端的写法
最近团队在接入微信支付,APP和JSAPI的接口都需要填写一个notify_url回调地址,但是坑爹的官方文档并没有找到JSAPI模式的java版的demo,所以不得不自己看文档写了一个接受微信异步通 ...
- 函数模板“偏特化” (C++)
模板是C++中很重要的一个特性,利用模板可以编写出类型无关的通用代码,极大的减少了代码量,提升工作效率.C++中包含类模板.函数模板,对于需要特殊处理的类型,可以通过特化的方式来实现特定类型 ...
- jquery 源码学习(三)
jQuery源码分析-03构造jQuery对象-源码结构和核心函数,需要的朋友可以参考下. 作者:nuysoft/高云 QQ:47214707 EMail:nuysoft@gmail.com 毕竟 ...
- javascript常用的基础函数或方法——写给新手的我(持续补充)
1常用基础函数 alert函数:显示一个警告对话框,包括一个OK按钮.这就是传说中的警告框,此框一弹,世界就清静了.举例: alert("我一旦出现,之前出现的就算了,我屁股后面你们就歇 ...
- js之美
http://fxck.it/post/72326363595 大部分脚本语言里字面量都要快一些,因为解析[]比解析new Array()步骤少的多 关于Object可以用constructor注入的 ...
- iis启动 服务无法在此时接受控制信息。 (异常来自 HRESULT:0x80070425)
原文:iis启动 服务无法在此时接受控制信息. (异常来自 HRESULT:0x80070425) 问题描述:每隔一段时间应用程序池就会自动停止,报错:服务无法在此时接受控制信息. (异常来自 HRE ...
- WPF透明窗体制作
原文:WPF透明窗体制作 窗体的样式: <Grid Width="{Binding Width, ElementName=w}" Height="{Binding ...
- WPF 实现水纹效果
原文:WPF 实现水纹效果 鼠标滑过产生水纹,效果图如下: XMAL就放置了一个img标签 后台主要代码 窗体加载: private void Window_Loaded(object s ...