您的位置:首页 > 编程语言 > Java开发

java中“”和null的区别以及==和equals的区别

2017-09-22 11:23 330 查看
     首先先说一下null 和 “” 的区别:

     String str1 = null;

     String str2 = "";

     str1还不是一个实例化的对象,而str2已经实例化了。空字符串("")已经分配了内存,而null没有分配内存。

     ""是一个空字符串(string),他在内存中是存在的,他可以使用Object对象中的方法("".equals()、"".toString()),null是一个

空对象,他在内存中是不存在的,他不能使用Object对象中的方法。

     在比较的时候,必须是str1==null,str2.equals(""),否则就会报错。至于为什么是必须这样来比较,下面来介绍==和equals的不同点。

     来说一下==和equals的区别:

      ==:

      对于8种基本数据类型(byte、short、int、long、double、float、boolean、char),变量直接存储的是值的话,比较的就是值本身。

      对于非基本数据类型(引用数据类型)的变量,例如:String str = new String("hello"); str 就是指向了一个对象,也可以把str

      称为对象的引用,这时变量str中存储的是它指向对象在内存中的存储地址,并不是值本身,也就是说,不是直接存储的"hello"。

      String str1 = new String("hello");

      String str2 = new String("hello");

      用== 比较str1和str2,得到的结果是false,因为他们指向的是不同的对象,也就是说他们的实际存储的内存地址不同。

     equals:

     equals方法是基类Object中的方法,所有继承Object的类都有此方法。在Object类中,equals方法是用来比较两个引用对象是否相等,即是否指向同一个对象。

     String str1 = new String("hello");

     String str2 = new String("hello");

     在String类中,对equals方法进行了重写,用来比较指向的字符串对象所存储的值是否相等。诸如其他的类,重写了equals法,

就是比较存储对象的内容是否相等。

     总结:

     ==,如果是对于基本数据类型的变量,直接比较的是存储的值是否相等;如果是对于引用数据类型,则比较的是存储的内存地址是否相等。

     equals,是不能作用于基本数据类型的变量。如果这个类没有对equals方法重写,则比较的是变量指向对象存储的内存地址是否相等,如果对equals方法进行了重写,则比较的是指向对象的内容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: