一、equal 和 ==:
1、==:
比较对象的地址和基本类型的值;
2、Equals :
Java 语言里的 equals方法是交给开发者去覆写的,让开发者自己去定义满足什么条件的两个Object是equal的。所以我们不能单纯的说equals到底比较的是什么。你想知道一个类的equals方法是什么意思就是要去看定义。
如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是"== "的判断。
源码中依然使用==来进行比较意义不大 所有java中一些类对这个方法进行重写.比如String类的equal方法覆写后是,直观的讲,就是比较字符串内容是不是都相同.
所以如果没有重写equals()方法比较的是对象的地址,因为对Object来说对象没有什么属性可以比较,只能比较最底层的地址。
总结一:
==比较的对象的地址 ,被String重写的equals比较的是内容。
3、null
NULL:代表声明了一个空对象,空引用(没有指向任何空间的引用)
4、""
存在引用 ,但指向一块空的内存空间,可进行实际的操作。
String s=”a” 和 String s=new String(“a”) 是有本质上的区别的 :
-
String str=”aaa”; //于栈上分配内存 ;
在字符串池里写入一个字符’a’,然后用s指向它;
-
String str=new String(“aaa”); //于堆上分配内存
在堆上创建一个内容为”a”的字符串对象
补充知识:
堆: 用来存放实例化的对象还有数组 ;
栈 : 主要是用来存放一些基本类型的数据还有引用 ;
5、赋值
关于null != a 与 a != null 的区别
与equals类似!,需要对null的位置进行编码风格的统一。
https://blog.csdn.net/u010321349/article/details/81562185