你可能不知道的Java小细节

1.下面代码:

        String p="abc";
        String q="cde";
        if (p==(p=q))
        {
            System.out.println(true);
        }
        System.out.println(p);

打印结果:

ced

如果改为:

        String p="abc";
        String q="cde";
        if (p!=(p=q))
        {
            System.out.println(true);
        }
        System.out.println(p);

打印结果:

true
cde

而如果这样写:

        String p="abc";
        String q="cde";
        if ((p=q)==p)
        {
            System.out.println(true);
        }
        System.out.println(p);

输入结果则为:

true
cde

当执行if (p==(p=q))这句判断时,程序先获取到p的值,然后拿它和(p=q)的结果进行比较,在比较前,p已经被改变了,但是程序不会回头重新获取一次p的值,而是拿之前获取到的值和后面得到的值进行比较,所以结果为false。

2.ConcurrentLinkedQueue的size方法不是线程安全的,在执行该方法期间如果另一个线程进行了remove,结果会不准。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值