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()的更多相关文章

  1. equals变量在前面或者在后面有什么区别吗?这是一个坑点

    我就不废话那么多,直接上代码: package sf.com.mainTest; public class Test { public static void main(String[] args) ...

  2. 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 ...

  3. 【特种兵系列】String中的==和equals()

    1. 小样示例 public static void main(String[] args) { String a = "a" + "b" + 123; Str ...

  4. (转)浅谈Java中的equals和==

    原文地址: http://www.cnblogs.com/dolphin0520/p/3592500.html 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new S ...

  5. 浅谈Java中的equals和==(转)

    浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...

  6. List<T>Find方法,FindAll方法,Contains方法,Equals方法

    假如传入的T是一个类, List<MessageInfos> MessageInfos = new List<MessageInfos>(); MessageInfos= Me ...

  7. 让代码重构渐行渐远系列(3)——string.Equals取代直接比较与非比较

    重构背景及原因 最近由于项目组的人员在不断扩充,导致项目中代码风格各异,大有百花齐放甚至怒放之势.考虑到团队的生存与发展,经过众人多次舌战之后,最终决定项目组根据业务分成几个小分队,以加强团队管理与提 ...

  8. [java] 更好的书写equals方法-汇率换算器的实现(4)

    [java] 更好的书写equals方法-汇率换算器的实现(4) // */ // ]]>   [java] 更好的书写equals方法-汇率换算器的实现(4) Table of Content ...

  9. Equals和ReferenceEquals

    稍微分析下一下两个方法的区别: public static bool Equals(object objA, object objB); public static bool ReferenceEqu ...

  10. 【原创】Java和C#下String类型中的==和equals的原理与区别

    一.Java下 1.几个例子 public static void main(String[] arge) { String str1 = new String("1234"); ...

随机推荐

  1. DDD~领域事件与事件总线

    回到目录 谈谈它 终于有些眉目了,搜刮了很多牛人的资料,英文的,中文的,民国文的,终于小有成就了,同时也做了个DEMO,领域事件这东西好,但需要你明白它之后才会说好,而对于明白领域事件这件事来说,它的 ...

  2. EF架构~Cannot attach the file as database

    回到目录 Cannot attach the file as database这个异常是在EF的code frist里经常出现的,解决方法很简单,只要重新启动一下V11实例即可. CMD> sq ...

  3. “胡”说IC——菜鸟工程师完美进阶

    “胡”说IC——菜鸟工程师完美进阶(数十位行业精英故事分享,顶级猎头十多年来经验总结,对将入或初入IC电子业“菜鸟”职业发展.规划的解惑和点拨.) 胡运旺 编著   ISBN 978-7-121-22 ...

  4. IOS笔记045-UIDatePicker和UIPickerView

    这是两种可以上下滚动的控件. 这是UIDatePicker,可以显示日期和时间. 这个是UIPickerView,显示类似几个选择项的界面. 注意点:PickerView的高度不能改,默认162,Pi ...

  5. 每天一个linux命令(15):tail 命令

    tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新, ...

  6. TSQL Merge 用法

    在更新数据仓库时,经常需要根据源表对Target表进行数据同步,Merge 命令具有数据更新,删除,插入的功能,专门用于数据同步,并将数据的更新输出到表中.在使用Merge命令时,需要注意when n ...

  7. .NET程序集强命名删除与再签名技术 源代码剖析

    如果你想去除一个程序集的强签名(strong name),目前为止可以有两个途径 1  反编译为IL代码,删除签名部分,再编译为程序集 2  应用Re-Sign程序,直接对一个程序集再签名 生成和读取 ...

  8. @import导入外部样式表与link链入外部样式表的区别

    昨天碰到同事问了一个问题,@impor导入外部样式与link链入外部样式的优先级是怎样的,为什么实验的结果是按照样式表导入后的位置来决定优先级. 今天就这个问题,度娘上找了很久,终于有个总结性的答案出 ...

  9. Android中常用控件及属性

    在之前的博客为大家带来了很多关于Android和jsp的介绍,本篇将为大家带来,关于Andriod中常用控件及属性的使用方法,目的方便大家遗忘时,及时复习参考.好了废话不多讲,现在开始我们本篇内容的介 ...

  10. Oracle Concept

    1. Truncate Truncate是DDL命令.表的物理位置是保存在数据字典中表的定义的一部分.首次创建时,在数据库的数据文件内给表分配了一个固定大小的空间.这就是所谓的区间并且为空.那么当插入 ...