zoukankan      html  css  js  c++  java
  • 2个byte类型数据相加(转型问题的分析)

    转自https://blog.csdn.net/alinshen/article/details/53571857

    今天看到网上有网友问到关于final修饰的面试题目,题目如下:

    1. <span style="font-family:SimSun;"><span style="font-size:14px;">byte b1=1,b2=2,b3,b6,b8;  
    2. final byte b4=4,b5=6,b7;  
    3. b3=(b1+b2);  /*语句1*/  
    4. b6=b4+b5;    /*语句2*/  
    5. b8=(b1+b4);  /*语句3*/  
    6. b7=(b2+b5);  /*语句4*/  
    7. System.out.println(b3+b6);</span></span>  


    问题是:上面哪条语句运算会出错呢?

    其实,这个题目主要考察的就是基本数据类型转换的问题,主要涉及到以下几个知识点:

    1、所有的byte,short,char型的值将被提升为int型;
    2、如果有一个操作数是long型,计算结果是long型;
    3、如果有一个操作数是float型,计算结果是float型;
    4、如果有一个操作数是double型,计算结果是double型;
    5、final修饰的变量不会自动改变类型,当2个final修饰相操作时,结果会根据左边变量的类型而转化。

     

    最需要注意的是第五点,被final修饰的,这句话看似简单,但其实包含的有2种情况:

    1.被final修饰的为byte,short,char,int中的任何一种,则运算之后,得到的类型可以是byte、short、char、int、long、float、double中的任何一种都不会出错;(前提是计算结果不能超出左边的取值范围,比如两个a都是char但是相加结果是194,超出了byte范围,所以结果不能是byte)

    2.如果运算中有被final long 或者 final float 或者 final double修饰,则结果必须为同级别或者高一级别,eg:

     

    1. <span style="font-size:14px;">  final byte a1=1,b1=1,c1=1,b11;  
    2.         final char a2='a',b2='a',c2='a',b22;  
    3.         final short a3=3,b3=3,c3=3,b33;  
    4.         final int a4=4,b4=4,c4=4,b44;  
    5.         final long a5=5,b5=5,c5=5,b55;  
    6.         final float a6=6,b6=6,c6=6,b66;  
    7.         final double a7=7,b7=7,a8=8,b77;  
    8.           
    9.         //等号右边,被final修饰的为byte,short,char,int中的任何一种;等号左边可以为byte、short、char、int、long、float、double中的任何一种都不会出错  
    10.         b11=a1+a2;  
    11.         b11=a2+a3;  
    12.         b22=a2+a3;  
    13.         b33=a4+a3;  
    14.         b44=a2+a3;  
    15.         b55=a2+a3;  
    16.         b66=a2+a3;  
    17.         b77=a2+a3;  
    18.           
    19.         //等号右边,被final修饰的为long、float、double中的任何一种;等号左边类型必须等于或者高于等号右边类型才不会出错,否则出错。   
    20.         b11=a4+a5;   //编译时出错  
    21.         b22=a5+a5;   //编译时出错  
    22.         b33=a5+a5;   //编译时出错  
    23.         b44=a5+a5;   //编译时出错  
    24.         b55=a6+a6;   //编译时出错  
    25.         b66=a5+a6;  
    26.         b77=a7+a2;</span>  

     

    有不正确的地方希望大家留言指出来。

  • 相关阅读:
    XMU1349 xmu_1349
    字符串排序
    linux磁盘文件与目录管理系统(2)
    poj 3667 Hotel
    poj 3468 A Simple Problem with Integers
    linux文与目录管理
    Linux的磁盘与文件管理系统(1)
    hdu 1698 Just a Hook
    poj3225 Help with Intervals
    poj 2886Who Gets the Most Candies?
  • 原文地址:https://www.cnblogs.com/lijingran/p/8810609.html
Copyright © 2011-2022 走看看