未知数据

从头看Java

   ::  :: 联系 :: 聚合  :: 管理
  28 Posts :: 0 Stories :: 10 Comments :: 0 Trackbacks

 

1. 比较运算符 “==”

    如果进行比较的两个操作数是数值型的,则是比较两个操作数的值,只有二者的值相等,就返回true.

    如果进行比较的是引用类型,则当二者都执行相同的实例时,才返回true.

    程序清单:String类型的比较

public class StringTest {
 
    public static void main(String[] args) {
        
        String str1 = new String("123");
        String str2 = new String("123");
        
        System.out.println(str1 == str2);//这里返回false
        System.out.println(str1.equals(str2));//true
        
        String str3 = "123";
        String str4 = "123";
        System.out.println(str3 == str4);//这里返回true
        System.out.println(str3.equals(str4));//true
        
        
    }
}

  如代码所示,两个new得到的String对象虽然值相等,str1.equals(str2)返回true,但由于两个分别是不

同的对象实例对象,在堆内存中占有不同的内存空间,所以str1 == str2返回false.当执行str3 = "123"时,系

统会先从缓存中检查是否有一个内容为"123"的实例存在,如果没有则会在缓存中创建一个String对象"123",

执行str4 = “123”时,缓存中已经有了相同内容的对象,系统则不再生成对象,直接将str4指向那个对象.所

以str3 == str4会返回true.

     同样的系统会把一些创建成本大,需要频繁使用的对象进行缓存,从而提高程序的运行性能.再比如

Integer类.

     程序清单,Integer的比较

public class IntegerTest {
 
    public static void main(String[] args) {
        
        Integer ia = 1;
        Integer ib = 1;
        
        System.out.println(ia == ib); //true
        
        Integer ic = 128;
        Integer id = 128;
        
        System.out.println(ic == id); //false
    }
 
}

  系统会将int整数自动装箱成Integer实例,新建实例时,系统会先创建一个长度为256的Integer数组,

其中存放-128到127的Integer实例,当再需要一个在这个范围中的Integer对象时,系统会直接将引用变量

指向相应的实例对象,ia和ib都指向相同的Integer对象所以上面的ia == ib 返回true;而当需要创建的

Integer对象不在这个范围中时,系统则会新创建对象,实际上ic和id是两个不同的对象,则ic == id 返回false.

2. 逻辑运算符

 

 程序清单:|| 和 | 的区别

public class LogicTest {
 
    public static void main(String[] args) {
        
        int a = 1;
        int b = 2;
        
        if (a == 1 || b++ == 3) {
            System.out.println("a="+a+",b="+b);//a=1,b=2
        }
        
        if (a == 1 | b++ ==3) {
            System.out.println("a="+a+",b="+b);//a=1,b=3
        }
 
    }
 
}

  "||" 当前面的结果为true时,不会在计算后面的结果,会直接返回true;"|"总是会计算前后两个表达式.

posted on 2009-01-11 23:41 wangjc 阅读(120) 评论(0)  编辑  收藏 所属分类: 从头看Java

只有注册用户登录后才能发表评论。


网站导航: