java中基本数据类型转换

当使用+-*/%运算时,遵循以下规则:

1.当两个操作数有一个为double时,另外一个也会转化为double类型,并且结果也会转换成double类型
2.当两个操作数有一个为float时,另外一个也会转化为float类型,结果也是float
3.当两个操作数有一个为long时,另外一个也会转化为long类型,并且结果也为long
4.除此以外的所有基本数据类型(short,byte,int,char),都会先转换成int型
5.被final修饰的变量不会进行数值转换

例如:

short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 +=1;有什么错?

 答:对于short s1=1;s1=s1+1来说,在s1+1运算时会自动提升表达式的类型为int,那么将int赋予给short类型的变量s1会出现类型转换错误。

对于short s1=1;s1+=1来说 +=是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。

面试题:

 /*
      面试题:
          
          byte b1=3,b2=4,b;
         b=b1+b2;
          b=3+4;
          那句是编译失败 的呢?为什莫尼?
  
          遇到这样的题目主要看等号右边的表达式的形式,变量相加还是常量相加
    
 */
 class  Test
 {
     public static void main(String[] args) 
     {
        byte b1=3,b2=4,b,bb;
         //b=b1+b2;错误  错误,可能损失精度
         bb=(byte)(b1+b2);
         /*
             以上代码的步骤分析:
                 byte 有三个变量:b1  b2   b
                 等号是把b1+b2做加法操作(类型 比int类型小,变量在做加法的时候要找到最大数值类型,没有long、没有float、没有double)int类型
                 把操作后的结果int 类型给了(byte)类型,强制类型转换
         */

        b=3+4;//正确 b=byte 7
        /*
            以上代码的步骤分析:
                3是一个人常量,4是一个常量。常量加常量结果还是常量
                注意:
                    在编译时就能决定程序是否错误。会把常量值判断在不在当前数据类型的范围内,会把当前的常量值看成我所属的类型
         */
    }
 }


猜你喜欢

转载自blog.csdn.net/qq_41889292/article/details/80778591