zoukankan      html  css  js  c++  java
  • java中的陷阱,看看你掉进去了么! 我自己的理解。

    2、浮点数想减

    System.out.println(2.0-1.9);  
    System.out.println(2.0-1.9); 

    上面会打印0.1么?

    这个不明白,求指点。

    3、交换

    int x = 2010; 
    int y = 2012; 
    x^=y^=x^=y;
    System.out.println("x= " + x + "; y= " + y);

    x、y的值互换了么?

    自己试了下,y的成功换成了2010,x则变成了0,

    按照我的理解,

     

    x^=y^=x^=y;

    这一行应该是转换成这样子运行的:

    x = x^y;

    y = y^x;

    x = x^y;

    事实也证明上述三行代码能成功互换 x 和 y 的值。但是为什么不行呢?

    最后我把它转换成了这样子:

     

    x = x^(y = y^(x = x^y));

     

    这样好像容易理解为什么 x 是 0。

    x = x^y 的内容应该是没有来得及改变 x = x^(...)  里面第二个 x 的内容,也就是说仍然是其初始值2010。

    而括号里面的内容也就是 y 的值被修改成了 x 的值 2012。

    于是,最后变成了 x = 2012 ^ 2012。当然 x 的值是  0。

    但是为什么括号里面对 x 的重新赋值没有影响到,括号外面的 x 的值呢?

    仅仅是因为这是一个位运算?

    求大师指点。

     




     

  • 相关阅读:
    css3
    jquery常用的几种配置
    1808第一周笔记
    webpack打包的用法
    模块的使用及几类方式
    node的规范(common.js)
    模块化开发
    传统开发模式的缺点
    创建百度地图
    离线缓存总结
  • 原文地址:https://www.cnblogs.com/lanfengniao/p/3061125.html
Copyright © 2011-2022 走看看