每天开心一点

java 基本数据类型及自动类型提升

2019-10-17 19:13:00    六月    687    来源: https://www.cnblogs.com/skipping/p/5449019.html

  Java定义了若干使用于表达式的类型提升规则: 
   1) 所有的byte型. short型和char型将被提升到int型(例外: final修饰的short, char变量相加后不会被自动提升。)
   2)如果一个操作数是long形 计算结果就是long型;
   3)如果一个操作数是float型,计算结果就是float型;

   4)如果一个操作数是double型,计算结果就是double型;

    += 自加没有自动类型提升问题


Java中关于类型自动提升的两个注意点。

问题一:在进行赋值运算时,进行类型提升:

  例如:short s1 = 1;s1 = s1 + 1; (错的编译通不过) short s2 = 1;s2 += 1;(正确,编译和运行都能通过)

  为什么呢?这其中就涉及到了类型的自动提升问题。解释如下:

     short s1 = 1;        // 这个表达式会进行自动类型提示,因为1为int类型,        // 所以提升后整体的数据类型为int类型。因为short类型为2个字节,int类型为4个字节,        // 把四个字节的内容放到2个字节的内容中,编译肯定通不过。        //下面的表达式等效于:short s1= (int)(s1+1);
        s1 = s1 + 1;//(这行代码编译时,是通不过的)        
        //根据java规范中给出的解释:符合表达式自动的将所执行计算的结果转型为其左侧变量的类型,        //如果结果类型与该变量的类型相同,那么这个转型不会造成任何影响,如果结果类型比该类型        //要大,那么就会出现编译不通过的现象。
        short s2 = 1;        //下面的表达式的实际过程是:short s2 = (short)(s2+1);
        s2 += 1;

        System.out.println("values is:" + s1);

 

问题二、条件表达式的自动类型提升 【条件】?【表达式一】:【表达式二】

  例如:int x = 10     ((x > 10) ? 9.9 : 9)

  根据我们的目测该表达式输出的结果应该为9.但是当你用程序输出结果的时候,它的结果却是9.0.这就是因为程序将计算后的结果的数据类型提升为两者之间较大的数据类型,float类型。下面给出解释:

条件表达式:

  1.如果表达式1和表达式2具有相同的数据类型,那么它就是条件表达式类型。

  2.如果表达式1和表达式2的数据类型不相同,则操作数据了行进行数字提升,提升为两个表达式类型中较大的数据类型。

 

唠叨一下:

  结束方面:在我们写程序的过程中,我们要保持一个求真的的心,时刻要问自己问什么?(Why?)。程序出错了要问为什么。程序能够正确运行了,我们同样要问为什么。这样我们才能够使自己更有深度。解决问题的时候才能够随心所欲。不出三年的时间,你的技术会有质的提升。

  生活方面:技术方面我们要求真,但是生活方面却恰恰相反,时刻保持难得糊涂的心,那样会使你的幸福感得到大大的提升。

 

做了近三年的程序员的一点小唠叨,高手勿喷哈。

参考: https://blog.csdn.net/liang5630/article/details/37935383

https://www.cnblogs.com/tony-yang-flutter/p/3600892.html