“==”和Equals的区别
2015-09-01 12:56
316 查看
要想很清楚的知道区别,就要从底层进行分析
(1)
基本数据类型
(2)包装类
Java面向对象思想就是万物皆对象,基本数据类型也得按上一个对象的称号,所以这些基本数据类型就对应着他们的对象(包装类),基本上都是数据类型的头个字母大写,对应着包装类,例如short—->Short,float—>Float,但是int—>Integer,char—->Character.这两个比较特殊
(3)匿名对象
每当创建一个String类型的字符串的时候,就相当于创建了一个匿名对象,Stiring str1=”hello”;
(2)equal用于比较两个对象的值(PS:内容)是否相同【不是比地址】
(3)”==”比”equal”运行速度快,因为”==”只是比较引用.
(4)
【特别注意】
Object类中的equals方法和“==”是一样的,没有区别,而String类,Integer类等等一些类,是重写了equals方法,才使得equals和“==不同”,所以,当自己创建类时,自动继承了Object的equals方法,要想实现不同的等于比较,必须重写equals方法。
(1)
基本数据类型
(2)包装类
Java面向对象思想就是万物皆对象,基本数据类型也得按上一个对象的称号,所以这些基本数据类型就对应着他们的对象(包装类),基本上都是数据类型的头个字母大写,对应着包装类,例如short—->Short,float—>Float,但是int—>Integer,char—->Character.这两个比较特殊
(3)匿名对象
每当创建一个String类型的字符串的时候,就相当于创建了一个匿名对象,Stiring str1=”hello”;
比较基本数据类型
基本数据类型用==package com.Thread.test; public class Demo2 { /** * @param args */ /**这里的比较有多重类型 * (1)无所怎么样子,Integer 与new Integer() 无论如何是不会相等的(PS:道理通String类型) * (2)两个非new出来的Integer,在-128到127之间,则是true,否则为false * (3)两个new Integer()的,为false * (4)int和Integer 无论如何都会为true,因为Integer会自动拆箱,然后再与int比较 * (5)事实证明只要一有加法运算,new 出来的就会自动拆箱 * */ public static void main(String[] args) { // TODO Auto-generated method stub test(); } public static void test(){ int aa=1; int bb=200; Integer cc=200; Integer dd=200; Integer a1=1; Integer b1=new Integer(1); Integer c1=2; Integer d1=new Integer(2); Integer e1=100; Integer f1=new Integer(200); Integer g1=100; Integer h1=new Integer(200); System.out.println(c1==b1); //false 证明(1) System.out.println(c1==(a1+a1)); System.out.println(d1==(b1+b1)); System.out.println(f1==(e1+e1)); //true true true 证明(5) System.out.println(e1==g1); System.out.println(cc==dd); //true false 证明(2) System.out.println(f1==h1); //false 证明 (3) System.out.println(aa==a1); System.out.println(aa==b1); System.out.println(bb==f1); System.out.println(bb==f1); // true true true true 证明(4) } }
String类型
看完这幅图基本上就明白了package com.Thread.test; public class Demo3 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub TestMethod(); } public static void TestMethod(){ String str1="i like "; String str2="girl"; String str3="i like girl"; String str4="i like girl"; String str5=new String("i like girl"); String str6=new String("i like girl"); System.out.println(str1==str2); System.out.println(str3==str4); System.out.println(str3.equals(str4)); System.out.println(str5.equals(str6)); System.out.println(str3==str5); System.out.println(str3==(str1+str2)); //false } }
总结
(1)“==”比较的是值【变量(栈)内存中存放的对象的(堆)内存地址】 (PS:这不过这个堆地址就放在栈内,也就是引用)(2)equal用于比较两个对象的值(PS:内容)是否相同【不是比地址】
(3)”==”比”equal”运行速度快,因为”==”只是比较引用.
(4)
【特别注意】
Object类中的equals方法和“==”是一样的,没有区别,而String类,Integer类等等一些类,是重写了equals方法,才使得equals和“==不同”,所以,当自己创建类时,自动继承了Object的equals方法,要想实现不同的等于比较,必须重写equals方法。
相关文章推荐
- Linux入门教程
- Hadoop学习笔记(十七)---Hive安装及配置
- Android Studio 导入 Eclipse 的代码后,代码中的注释显示乱码问题
- jquery中event对象属性与方法小结
- servlet+jsp+java实现Web 应用
- C++内存管理
- 安装intelhaxm出错,this computer does not support intel virtualization Technology(VT-x)
- 【leetcode每日一题】61.Rotate List
- C#------封装文件拷贝方法
- 博文收藏夹
- VMware Workstation 11
- 【Android进阶】-AIDL使用解析
- VS2010的代码粘贴到Word里面的汉字乱码
- 生鲜电商的七种模式分析
- ubuntu切换成root用户
- Linux:-bash: ***: command not found
- 大整数的加乘多项式运算
- C#中DataGridView常用操作实例小结
- 改善Java文档的理由、建议和技巧
- Leetcode: Distinct Subsequences