在java中常常会遇到作比较,比较大小、比较是否等值,那么有哪些比较方法,他们之间又有什么区别呢?java
一,先介绍一下==与equals()面试
==号比较的一直是地址值,ide
①对基本数据类型,==比较实际上就是变量数值是否相等,this
②对引用数据类型,比较的则是地址值。这里特别须要注意的是String类型,很容易想固然的使用==,很容易出错。equals()方法是Object类里的方法,咱们知道Java中一切类都会默认继承Object类,因此类对象都会有equals()方法。spa
2、基本数据类型及包装类code
①基本类型大概有byte、short、int、long、boolean、char、double、float这八类,它们声明的变量存放在栈内存中。 判断是否相等用==,比较大小用<、>、<=、>=便可对象
②它们对应的包装类型(Byte、Short、Integer、Long、Boolean、Character、Double)定义的变量则存在于堆内存中。继承
用new方法来声明一个Integer或者Long对象,由于new对象都是在堆里开辟一块空间,因此即使二者的数值相同,但对于==来讲,比较的是地址值,因此会返回false。(工做中就遇到这种状况)接口
int n3 = 48; System.out.println("--------使用new对象时,当值在[-127,128]之间时---------"); Integer n7 = new Integer(48); Integer n8 = new Integer(48); System.out.println(n7 == n8); //false System.out.println(n7 == n3); //true System.out.println("--------直接赋值方式,当值在[-128,127]之间时---------"); Integer n1 = 48; Integer n2 = 48; System.out.println(n3 == n1); //true System.out.println(n1 == n2); //true System.out.println(n1.equals(n2)); //true System.out.println(n1.equals(n3)); //true System.out.println(n1.intValue() == n2.intValue()); //true System.out.println("--------直接赋值方式,当值不在[-127,128]之间时---------"); Integer n4 = 128; Integer n5 = 128; int n6 = 128; System.out.println(n4 == n5); //false System.out.println(n4 == n6); //true System.out.println(n4.equals(n5)); //true System.out.println(n4.equals(n6)); //true System.out.println(n4.intValue() == n5.intValue()); //true //使用Integer.intValue()方法时须要注意验证是否为null,防止出现NullPointException
鉴于上述问题 能够采用两种方式作比较内存
3、 java对象比较
一、String类型的比较 (String类型不能直接使用>、<=、>=、<)
二、 类对象的比较 (判断两个对象是否相等,须要在类中重写equals()方法)
若是要比较两个对象的大小(这也是常会问到的面试题),有两种方式:
/** * Java中的比较总结 * @author yrr */ public class JavaCompareTest { @Test public void test5() { Person p1 = new Person("yrr",18); Person p2 = new Person("wx",19); System.out.println(p1.compareTo(p2) < 0); } } class Person implements Comparable<Person>{ private String name; private Integer age; public Person() { } public Person(String name, Integer age) { this.name = name; this.age = age; } public Integer getAge() { return age; } @Override public int compareTo(Person o) { return this.getAge() - o.getAge(); } }
package comparator; import java.util.Arrays; import java.util.Comparator; public class MyComparator { public static void main(String[] args) { User[] users = new User[] { new User("u1001", 25), new User("u1002", 20), new User("u1003", 21) }; Arrays.sort(users, new Comparator<User>() { @Override public int compare(User o1, User o2) { return o1.getAge() - o2.getAge(); } }); for (int i = 0; i < users.length; i++) { User user = users[i]; System.out.println(user.getId() + " " + user.getAge()); } } } class User { private String id; private int age; public User(String id, int age) { this.id = id; this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; } }