随记

有这样一段代码:

<pre name="code" class="java">int a = 2;
int b = 3;
if(a++ = b++){
a++;
b++;
}
system.print.out(a);
system.print.out(a);
 输出是什么? 

看到if中的条件的时候,瞬间蒙掉了,b++到底是赋值给了a?还是a++?

根据优先级,是赋值给了a所寄存的那个临时变量,即:a(临时变量) = 3;那a++就变成了a(旧值)+1=2+1=3

至于b,就不用说了,so,这段代码的输出是:3 4

OK,我们接着看一段代码:

int a = 2;
int b = 3;
if(a = b++){
a++;
b++;
}
system.print.out(a);
system.print.out(a);

这个简单啊,简化了上边最让我们头疼的a++赋值,那到底能不能运行呢?if里应该是逻辑值啊,这是个int,怎么办,强转吧:

if((boolean)a = b++)

这样不就OK了。

很不幸,上边的所有论述都是在扯蛋!

理由有两个:

1,赋值语句明确规定:赋值语句的左边必须是变量,不能是表达式,所以上述代码根本无法编译

2,关于if语句中的条件语句:由于Java是强类型语言,不能将int转化为boolean,其实java虚拟机内部boolean类型就是int类型,不过java编译器不允许boolean类型直接转换成int类型。但是由于PHP是弱类型语言,会将非0的变量或常量转为true以供if语句使用,所以代码会继续运行


代码虽小,境界无穷。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值