A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 刘劲松 于 2013-8-15 17:28 编辑

1.如果问大家“&”、“|”、“^”这三个是什么运算符?基会本上都会回答“位运算符”,但这样的回答只能得50分。大多数的Java程序员很可能不知道它还能充当其他的运算符——布尔逻辑运算符(前提是两边的数据类型为布尔类型)。

在布尔逻辑运算符中这三个运算符充当着“布尔逻辑与”、“布尔逻辑或”和“布尔逻辑异或”的角色。前面两个把它们再复制一个放在一起就成了逻辑运算符。布尔逻辑与(&)和布尔逻辑或(|)运算符的工作方式同逻辑与(&&)和逻辑或(||)的工作方式相同,布尔逻辑运算符的优先级别要高于逻辑运算符,除此之外它们还有一点细微的差别,看一看下面的程序将会输出什么,就会明白了。

最后一个布尔逻辑异或(^)用得就更少了,可以采用关系运算符不等于(!=)来代替,在此就不深究了。

布尔逻辑运算符与逻辑运算符还有个区别,就是布尔逻辑运算符可以与赋值运算符(=)结合成布尔逻辑赋值运算符(&=、|=、^=),而逻辑运算符就没有这样的功能,可能它本身就有两个了吧,再结合“=”的话就变三个了,呵呵,太多了 :)

public class Test1 {
   
public static void main(String[] args) {
        
int m = 5, n = 5;
        
if ((m != 5) && (n++ == 5)) {
        }
        System.out.println(
"a." + n);
        m
= n = 5;
        
if ((m != 5) & (n++ == 6)) {
        }
        System.out.println(
"b." + n);
        m
= n = 5;
        
if ((m == 5) || (n++ == 5)) {
        }
        System.out.println(
"c." + n);
        m
= n = 5;
        
if ((m == 5) | (n++ == 6)) {
        }
        System.out.println(
"d." + n);
    }
}

2. 自动装箱的疑惑

JDK1.5中增加了自动拆装箱的语言特性,在基本类型和包装类型之间可以相互地转换和运算。大家也都知道Java中==运算符是比较两个对象间的引用是否相同。在自动拆装箱与“==”运算符之间也会产生一些奇怪的事情,看看下面的程序将会输出什么?

public class Test2 {
    public static void main(String[] args) {
        int k = 100;
        Integer int1 = k;
        Integer int2 = k;
        System.out.println("a." + (int1 == int2));
        k = 200;
        Integer int3 = k;
        Integer int4 = k;
        System.out.println("b." + (int3 == int4));
        char c = 'A';
        Character char1 = c;
        Character char2 = c;
        System.out.println("c." + (char1 == char2));
        c = '国';
        Character char3 = c;
        Character char4 = c;
        System.out.println("d." + (char3 == char4));
    }
}




3. 奇怪的\u与0x

\u是Unicode字符的前缀,而0x是十六进制数值的前缀,能通用吗?下面的程序是否能如愿以偿地将Hello与World!分成两行输出呢?

public class Test3 {
    public static void main(String[] args) {
        /* 提示 \u000A 表示换行(LF),而 0x000A 表示什么呢? */
        char c = 0x000A; System.out.println("Hello" + c + "World!");
    }
}



4,模棱两可的方法重载

invoke有两个重载的方法,一个是Object作为参数,另一个是int[]作为参数,看看下面的程序会输出什么?

public class Test5 {
    public static void main(String[] args) {
        invoke(null);
    }

    private static void invoke(Object obj) {
        System.out.println("Object");
    }

    private static void invoke(int[] nums) {
        System.out.println("Arrays");
    }
}

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

1 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马