(总是忘记)的equals方法与“==”简单比较,忘记equals
(总是忘记)的equals方法与“==”简单比较,忘记equals
由于在学java的时候对于具体方法没有深究,对于java也是一知半解,所以在工作的时候写java代码比较时总是喜欢用“==”,而导致很多问题改了一次有一次,唉。。。。废话不多说,写篇博客以后做自己的笔记吧。
先说一下“==”,这个符号在java中用作基本类型的比较,而java中的基本类型默认是不能直接调用equals()方法的。
比如
int i=1;
int j=1;
i==j true
i.equals() 没有此方法
所以在编程时应记住,遇到的是基本类型的比较时用“==”,
既然说基本类型那么对于基本类型的包装类呢???如Integer,Double、Character、Float等。
先说一下包装类型的不同定义
jdk1.5之后:
Integer m=1;
Integer n=1;
jdk1.5之前(只能这样写):
Integer m1= new Integer(1);
Integer n1= new Integer(1);
在1.5之后,上面的两种方式都是支持的,但此处要注意。
m==n true
m1==n1 false
也就是说jdk1.5之后的包装类升级是把包装类,归为string等非基本类型来处理的。所以在equals()方法上包装类是都支持的
m.equals(n) true
m1.equals(n1) true
那么对于其他非基本类型呢?
String s1= "abc";
String s2 = "abc";
String s3 = new String("abc");
String s4 = new String("abc");
s1==s2 true;
s3==s4 false
s1==s3 false
是的在String中也有“==”可用时,但由于只要有new一个新变量,“==”便不可再用,所以对于string这样的类建议在编程时全用equals()方法
再说说equals方法。。
上面已经提到java的基本类型默认不支持equals()方法,那么如果在基本类型上用equals()方法就要自己重新定义
而在String,和包装类型时,建议全部用equals()方法。下面说到StringBuffer 这种特殊的类型在equals()上运用
StringBuffer的定义只能这样
StringBuffer s5=new StringBuffer("abc");
StringBuffer s6=new StringBuffer("abc");
而 s5.equals(s6) false 当然s5==s6更是false
且 String s7="abc" s7.equals(s5) false
所以在遇到StringBuffer时一定要注意重写equals()方法
总结:通过上面的一系列判断,其实不难发现,equals()方法在比较时较多是比较内容,但其实这里比较内容的类型是在继承object的equals()方法后又重写了自己的equals()方法,而在StringBuffer中,它用到的直接是Object的equals(0方法,所以它依然在比较内存地址。而“==”方法则都是在比较地址。
好了,就总结这些吧,大家觉得我说的不对,请指出,一起研究一下,嘿嘿
相关文章
- 暂无相关文章
用户点评