==与equals()
java中的比较有很多种
1.==
2.equals()
3.< 或 >或 !=
4.instanceof
5.compareTo
1.什么时候用“==” 什么时候用“equals”:
基本数据类型(byte,short,char,int,long,float,double,boolean);
首次你要知道什么是引用,什么是内存地址。
引用:每一个对象都存放在内存中,都需要一个引用指向它,不然就会被java虚拟机当成垃圾回收掉。
内存地址:简单点说就是java虚拟机给对象引用一个存储地方, 在堆中占4个字节的一串数字构成。(这里又涉及到内存的构成栈、堆、静态区)
例如: “str” 对象就被放在堆中, “Hollywrod”被放在静态区中。
String str =new String(“Hollywrod”);
“==”在比较:
基本数据类型: 比较的是它们字面量的值;(字面量:下面的“2” 和“hello wrod”都属于字面量。)
引用类型 : 比较的是它们在内存地址的值。(如果两个对象引用的是同一对象,那么它们内存地址是相同的)
例如:
int a = 2;
int b = 2;
String str1 = new String("hello word");
String str2 = new String("hello word");
String str3 = "hello word";
String str4 = "hello word";
System.out.println(a==b); true
System.out.println(str1==str2); false
System.out.println(str3==str4); true
“equals()”比较时:
比较对象时: 比较的也是他们引用在内存地址的值;
比较String类型对象时: 比较的是它们字面量的值;因为String类型的对象重写了“equals()”,所以才会比较字面量的值是否相同。
例如:
public class Student implements Comparable<Student>{
private int id;
private String name;
public Student(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(Student o) {
return this.name.compareTo(o.name);
}
}
Student s1 = new Student("1","张飞");
Student s2 = new Student("1","张飞");
Student s3 = new Student("10","张飞");
Student s4 = new Student("15","张飞");
Teacher t1 = new Teacher();
System.out.println(s1.equals(s2)); false
System.out.println(s1.getName().equals(s2.getName())); true 因为他们的name是字符串。
3.这种比较应该不需要多说:大于,小于,不等于
4.比较的是左右边对象是否是右边对象的引用,如果是返回true 不是则返回false
例如:
System.out.println(s1 instanceof Student);true
System.out.println(t1 instanceof Student);false
5.比较的是两个对象,用第二个对象减去第一个对象。得到大于,等于,小于零, 返回值为1,0,-1。
注意:如果比较类型为字符串,则默认的是比较的是字符串的长度。
如果是两个对象,则该对象需要是实现comparable接口,重写compareTo方法,指定两个对象以什么属性作比较。
System.out.println(s1.compareTo(s2)); 0
==与equals()的更多相关文章
- equals变量在前面或者在后面有什么区别吗?这是一个坑点
我就不废话那么多,直接上代码: package sf.com.mainTest; public class Test { public static void main(String[] args) ...
- How to implement equals() and hashCode() methods in Java[reproduced]
Part I:equals() (javadoc) must define an equivalence relation (it must be reflexive, symmetric, and ...
- 【特种兵系列】String中的==和equals()
1. 小样示例 public static void main(String[] args) { String a = "a" + "b" + 123; Str ...
- (转)浅谈Java中的equals和==
原文地址: http://www.cnblogs.com/dolphin0520/p/3592500.html 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new S ...
- 浅谈Java中的equals和==(转)
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...
- List<T>Find方法,FindAll方法,Contains方法,Equals方法
假如传入的T是一个类, List<MessageInfos> MessageInfos = new List<MessageInfos>(); MessageInfos= Me ...
- 让代码重构渐行渐远系列(3)——string.Equals取代直接比较与非比较
重构背景及原因 最近由于项目组的人员在不断扩充,导致项目中代码风格各异,大有百花齐放甚至怒放之势.考虑到团队的生存与发展,经过众人多次舌战之后,最终决定项目组根据业务分成几个小分队,以加强团队管理与提 ...
- [java] 更好的书写equals方法-汇率换算器的实现(4)
[java] 更好的书写equals方法-汇率换算器的实现(4) // */ // ]]> [java] 更好的书写equals方法-汇率换算器的实现(4) Table of Content ...
- Equals和ReferenceEquals
稍微分析下一下两个方法的区别: public static bool Equals(object objA, object objB); public static bool ReferenceEqu ...
- 【原创】Java和C#下String类型中的==和equals的原理与区别
一.Java下 1.几个例子 public static void main(String[] arge) { String str1 = new String("1234"); ...
随机推荐
- 如何在 Ubuntu 15.04 上安装带 JSON 支持的 SQLite 3.9
欢迎阅读我们关于SQLite 的文章,SQLite 是当今世界上使用最广泛的 SQL 数据库引擎,它基本不需要配置,不需要设置或管理就可以运行.SQLite 是一个是公开领域(public-domai ...
- 说说设计模式~桥梁模式(Bridge)
返回目录 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度? ...
- Node.js~sails.js~package.json的作用
回到目录 我们在sails框架进行node.js开发时,会涉及到项目的迁移,当迁移后可能你的module即丢失,这时,希望快速的安装所有的包包,可以使用下面命令 1 cd 你当前的sails项目 2 ...
- WebApi系列~通过HttpClient来调用Web Api接口
回到目录 HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api ...
- Kafka入门初探+伪集群部署
Kafka是目前非常流行的消息队列中间件,常用于做普通的消息队列.网站的活性数据分析(PV.流量.点击量等).日志的搜集(对接大数据存储引擎做离线分析). 全部内容来自网络,可信度有待考证!如有问题, ...
- SSH+JPA查询两个数据库
1.第一步导包: 1.struts2包: 2.spring包: 3.hibernate包: 4.数据库包: 2.web.xml配置 3.struts2的配置: 1.struts.xml 2.s001. ...
- iOS-性能优化4
UITableView性能优化技巧 Table view需要有很好的滚动性能,不然用户会在滚动过程中发现动画的瑕疵. 为了保证table view平滑滚动,确保你采取了以下的措施: 正确使用`reus ...
- 学习ASP.NET MVC(九)——“Code First Migrations ”工具使用示例
在上一篇文章中,我们学习了如何使用实体框架的“Code First Migrations ”工具,使用其中的“迁移”功能对模型类进行一些修改,同时同步更新对应数据库的表结构. 在本文章中,我们将使用“ ...
- 每天一个linux命令(43):killall命令
Linux系统中的killall命令用于杀死指定名字的进程(kill processes by name).我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在 ...
- DOM_06之定时器、事件、cookie
1.定时器:①任务函数:函数结尾判断临界值:②启动定时器:a.周期性:timer=setInterval(任务函数,interval):b.一次性:timer=setTimeout(任务函数,wait ...