关于==和equals,我们需要知道java中的数据类型,可分为两类:
1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean
他们之间的比较,应用双等号(==),比较的是他们的值。
2.复合数据类型(类)
当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。
对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。
String a = new String("hello");
String b = "hello";
String c = "hello";
System.out.println("a==b: " + (a==b)); \\1
System.out.println("a.equals(b): " + a.equals(b)); \\2
System.out.println("b==c: " + (b==c)); \\3
1: false
2: true
3: true
String b = "hello";和String c = "hello";对于这样的类型的声明方式(不是new出来的)串池把他们看做一个对象,所以池中只存储一份,只是有a和b两个引用罢了。
对于String只要用new关键字new出来的string,都是单独的一个对象,而“==”号,他是用来比较对象的内存地址,所以只要用==号来比较string,只要不是自己比自己,那肯定是false。
JAVA中字符串比较equals()和equalsIgnoreCase()的区别:
1.equals()函数:
主要是区分“比较的字符串” 大小写和长度时候相同,比较的类型可以是Object类型。
2.equalsIgnoreCase()函数:
比较的参数只能是字符串,这里只要字符串的长度相等,字母的大小写是忽略的。认为A-Z和a-z是一样的。