==与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"); ...
随机推荐
- Java程序员的日常 —— 多进程开发IO阻塞问题
本篇仍旧是源于最近的工作,总结一下纪念那些年埋下的坑... 背景故事 需求:"使用进程方式启动另一个程序!" 开发:"OK! Runtime.getRuntime().e ...
- Java程序员的日常 —— Java类加载中的顺序
之前说过Java中类的加载顺序,这次看完继承部分,就结合继承再来说说类的加载顺序. 继承的加载顺序 由于static块会在首次加载类的时候执行,因此下面的例子就是用static块来测试类的加载顺序. ...
- Atititi 版本管理 rc final rtm ga release 软件的生命周期中一般分4个版本
Atititi 版本管理 rc final rtm ga release 软件的生命周期中一般分4个版本 RC=Release Candidate,含义是"发布候选版",它不是最终 ...
- Atitit Server Side Include ssi服务端包含规范 csi esi
Atitit Server Side Include ssi服务端包含规范 csi esi 一.CSI (Client Side Includes) 1 1.1. 客户端包含1 1.2. Ang ...
- Sql Server 的本地时间和UTC时间
一,本地时间和UTC时间 本地时间 世界的每个地区都有自己的本地时间,整个地球分为二十四时区,每个时区都有自己的本地时间. UTC时间 在国际无线电通信中,为统一而普遍使用一个标准时间,称为通用协调时 ...
- 总结整理 -- ruby系列
基础学习 ruby -- 基础学习(一)项目文件夹说明 ruby -- 基础学习(二) 外键配置实现级联删除 ruby -- 基础学习(三)设置中国时区时间 ruby -- 基础学习(四)TimeDa ...
- JavaScript的学习--生成二维码
有一些耗cpu的计算,完全可以在客户端上计算,比如生成二维码. qrcode其实是通过计算,然后使用jquery实现图形渲染和画图.支持canvas和table两种方式生成我们所需的二维码. 具体用法 ...
- android 处理302地址
最近项目中需要用到重定向下载,所以找了很多的方法都不合适.因为下载的链接并非单纯的地址,而是需要多次转发的, 在下载的时候用的是URL来打开数据流.但是多次测试并不能对多次跳转的链接打开请求.对于30 ...
- html选中图片时,在页面回写图片
我们经常会遇到这种情况,就是上传一个图片,但是点击一个图片的时候,最好是可以在浏览器预览这个图片,不然用户还以为没有选择图片呢,但是浏览器的安全机制却阻止了这个问题,就是当访问的是网络上的网站的时候, ...
- php版本历史
php最初就是为了快速构建一个web页面而迅速被大家广为接受的.它的好处是在代码中能内嵌html的代码,从而让程序员能再一个页面中同时写html代码和php代码就能生成一个web页面. 这篇文章用时间 ...