"==" 是判断符号两边的对象是否相等,即它们的内存地址是否相等;
equals() 是判断两个对象的值是否相等,而不管它们的内存地址是否相等.(当然,若它们的内存地址相等,值一定相等);以下是典型示例:
- public class Test2 {
- public static void main(String[] args) {
- String str1 = "apple"; ⁄*先查看字符串池里有没有这个值,若没有,则开辟一个空间用来存放这个值*/
- String str2 = "apple"; ⁄*先查看字符串池里有没有这个值,若有,则str2指向这个内存地址*/
- System.out.println("str1==str2:"+(str1==str2)); ⁄*因为str1与str2的内存地址一样,所以"=="的结果为true*/
- System.out.println("str1 equals str2:"+str1.equals(str2));
- String str3 = new String("banana");
- String str4 = new String("banana"); ⁄*分别创建了两个不同的字符串对象,str3和str4*/
- System.out.println("str3为"+str3+"\nstr4为"+str4);
- System.out.println("str3==str4:"+(str3==str4));
- System.out.println("str3 equals str4:"+(str3.equals(str4)));
- ⁄*str3和str4分别代表两个不同的内存地址,所以"=="的结果为false*/
- ⁄*这时应该看得出String类型的两种创建对象的方法之间的区别了吧!要注意的是第一种创建对象方法采用的池技术对象的值可以重复利用*/
- int i1 = 10;
- int i2 = 10;
- System.out.println("i1==i2:"+(i1==i2));
- ⁄*为什么结果为true?本人的理解是:int只是一个基本数据类型,不是一个封装类型.而它的封装类型Integer则符合上面的原理请看下面代码*/
- Integer integer1 = new Integer(10);
- Integer integer2 = new Integer(10);
- System.out.println("integer1==integer2:"+(integer1==integer2));
- System.out.println("integet1 equals integer2:"+integer1.equals(integer2));
- Object obj1 = new Object();
- Object obj2 = obj1;
- System.out.println("obj1==obj2:"+(obj1==obj2));
- //对象obj1和obj2都指向同一个内存地址.
- }
- }
复制代码 运行效果图:
|