平行世界中的你还是你吗?--java中的==是否相等

Posted davidwang456

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了平行世界中的你还是你吗?--java中的==是否相等相关的知识,希望对你有一定的参考价值。

故事背景

  《宇宙追缉令》是黄毅瑜执导的动作科幻类电影,由哥伦比亚三星公司出品,戴尔里·林多、李连杰、杰森·斯坦森领衔主演。影片于2001年11月2日在美国上映。该片讲述了邪恶尤兰,为了成为宇宙最强的人,逐一消灭了一百二十三个宇宙其他空间的分身,并吸收他们的能量,最后剩下一个在洛杉矶当警察的正义尤兰与他展开一场生死决战的故事。

技术图片

 

  在故事中,其他数个空间的分身,每杀掉一个自己,其其他分身的功力就会增长。感觉有点恐怖和惊奇,分身是自己还是别人?或者自己是自己吗?值得一看的电影。

数学世界

在数学中,不存在模糊的概念,等号(=)定义了一种真实的数之间的等价关系,满足自反性,传递性,对称性。

自反性:对于所有x,x = x。也就是说,每个值与其自身存在相等关系 。

传递性:如果x = y 并且y = z,那么x = z。

对称性:如果x = y,那么y = x。

java世界

java中存在==用来表示相等的关系,那么它满足自反性,传递性和对称性吗?能否提供一段程序来演示它是否违反了任意性质?

1.自反性的例子

    public static void main(String[] args) 
        int i=5;
        System.out.println("x is int x = x : "+(i==5));
        
        float f=Float.NaN;
        
        System.out.println("x is float nan x=x :"+(f==Float.NaN));
        
        double d=Double.NaN;
        
        System.out.println("x is double nan x=x :"+(d==Double.NaN));        
    

 

输出结果:

x is int x = x : true

x is float nan x=x :false

x is double nan x=x :false

从上面的实例来看,==不具有自反性

2.传递性

    public static void main(String[] args) 
        long x = Long.MAX_VALUE;
        double y = (double) Long.MAX_VALUE;
        long z = Long.MAX_VALUE - 1;
        System.out.println((x == y) + ""); // Imprecise!
        System.out.println((y == z) + ""); // Imprecise!
        System.out.println(x == z); // Precise!        
    

输出结果为:

true
true
false

传递性有问题。

3.对称性

    public static void main(String[] args) 
        int i=5,j=5;    
        System.out.println("x y is int x = y : "+(i==j));
        
        float f=0.53f,f1=0.53f;        
        System.out.println("x y is float x = y : "+(f==f1));
        
        double d=0.3836,d1=0.3836;        
        System.out.println("x y is double x = y : "+(d==d1));    
    

输出结果为:

x y is int x = y : true
x y is float x = y : true
x y is double x = y : true

总结:

总之,java中的==使用时要警惕到float 和double 类型的拓宽原始类型转换所造成的

损失。它们是悄无声息的,但却是致命的。它们会违反你的直觉,并且可以造成非常微妙的错误。

参考资料:

【1】https://baike.baidu.com/tashuo/browse/content?id=7a442b409e380dc8e1b3fb5f&fr=qingtian&lemmaId=69962

【2】java解惑

【3】https://baike.baidu.com/item/%E5%AE%87%E5%AE%99%E8%BF%BD%E7%BC%89%E4%BB%A4/6174641?fr=aladdin

以上是关于平行世界中的你还是你吗?--java中的==是否相等的主要内容,如果未能解决你的问题,请参考以下文章

压力测试:图测测你的压力有多大?

史上最准压力测试

压力测试心理学上最诡异的14张图,准得让人尖叫!

eclipse 项目中的java文件没有在WEB-INF目录下的classes中 生成相对应的编译后的类

数学问题向量相加的方法

“小小的世界大大的你”演讲全文,这是衡中的呐喊,这是我们每个人都该为自己呐喊,我们不甘平庸