2个byte类型数据相加(转型问题的分析)
转自https://blog.csdn.net/alinshen/article/details/53571857
今天看到网上有网友问到关于final修饰的面试题目,题目如下:
- <span style="font-family:SimSun;"><span style="font-size:14px;">byte b1=1,b2=2,b3,b6,b8;
- final byte b4=4,b5=6,b7;
- b3=(b1+b2); /*语句1*/
- b6=b4+b5; /*语句2*/
- b8=(b1+b4); /*语句3*/
- b7=(b2+b5); /*语句4*/
- System.out.println(b3+b6);</span></span>
问题是:上面哪条语句运算会出错呢?
其实,这个题目主要考察的就是基本数据类型转换的问题,主要涉及到以下几个知识点:
1、所有的byte,short,char型的值将被提升为int型;
2、如果有一个操作数是long型,计算结果是long型;
3、如果有一个操作数是float型,计算结果是float型;
4、如果有一个操作数是double型,计算结果是double型;
5、被fianl修饰的变量不会自动改变类型,当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:
- <span style="font-size:14px;"> final byte a1=1,b1=1,c1=1,b11;
- final char a2='a',b2='a',c2='a',b22;
- final short a3=3,b3=3,c3=3,b33;
- final int a4=4,b4=4,c4=4,b44;
- final long a5=5,b5=5,c5=5,b55;
- final float a6=6,b6=6,c6=6,b66;
- final double a7=7,b7=7,a8=8,b77;
- //等号右边,被final修饰的为byte,short,char,int中的任何一种;等号左边可以为byte、short、char、int、long、float、double中的任何一种都不会出错
- b11=a1+a2;
- b11=a2+a3;
- b22=a2+a3;
- b33=a4+a3;
- b44=a2+a3;
- b55=a2+a3;
- b66=a2+a3;
- b77=a2+a3;
- //等号右边,被final修饰的为long、float、double中的任何一种;等号左边类型必须等于或者高于等号右边类型才不会出错,否则出错。
- b11=a4+a5; //编译时出错
- b22=a5+a5; //编译时出错
- b33=a5+a5; //编译时出错
- b44=a5+a5; //编译时出错
- b55=a6+a6; //编译时出错
- b66=a5+a6;
- b77=a7+a2;</span>
有不正确的地方希望大家留言指出来。
2个byte类型数据相加(转型问题的分析)的更多相关文章
- Java中Byte类型数据在运算中的问题
比如: byte a=1; byte b=2; byte c; c=a+b; //这样是计算不出c,是错误的 c=a+1; //这样也是不能计算c的 c=64+1; //为什么这样就能计算c,在Jav ...
- 1.1两个char类型数据相加后,转化为int类型
#include<stdio.h> main() { char a = 127; char i=0; char ai=0; ai= a+i; printf("size short ...
- 两个int类型的数据相加,有可能会出现超出int的表示范围。
两个int类型的数据相加,有可能会出现超出int的表示范围. /* 移位运算符: <<(左移) 规律:一个操作数进行左移运算的时候,结果就是等于操作数乘以2的n次方,n就是左移 的位数. ...
- EF里Guid类型数据的自增长、时间戳和复杂类型的用法
通过前两章Lodging和Destination类的演示,大家肯定基本了解Code First是怎么玩的了,本章继续演示一些很实用的东西.文章的开头提示下:提供的demo为了后面演示效果,前面代码有些 ...
- OpenCV中IplImage图像格式与BYTE图像数据的转换
最近在将Karlsruhe Institute of Technology的Andreas Geiger发表在ACCV2010上的Efficent Large-Scale Stereo Matchin ...
- 解剖SQLSERVER 第四篇 OrcaMDF里对dates类型数据的解析(译)
解剖SQLSERVER 第四篇 OrcaMDF里对dates类型数据的解析(译) http://improve.dk/parsing-dates-in-orcamdf/ 在SQLSERVER里面有几 ...
- 解剖SQLSERVER 第五篇 OrcaMDF里读取Bits类型数据(译)
解剖SQLSERVER 第五篇 OrcaMDF里读取Bits类型数据(译) http://improve.dk/reading-bits-in-orcamdf/ Bits类型的存储跟SQLSERVE ...
- C#中将结构类型数据存储到二进制文件中方法
以往在vb6,vc6中都有现成的方法将结构类型数据写入和读取到二进制文件中,但是在c#中却没有现成的方法来实现,因此我查阅了一些资料,借鉴了网上一些同学的做法,自己写了个类似的例子来读写结构类型数据到 ...
- EF——Guid类型数据的自增长、时间戳和复杂类型的用法 03 (转)
EF里Guid类型数据的自增长.时间戳和复杂类型的用法 通过前两章Lodging和Destination类的演示,大家肯定基本了解Code First是怎么玩的了,本章继续演示一些很实用的东西.文 ...
随机推荐
- linux 常见命令及说明杂记
systemctl 命令: systemctl 是管制服务的主要工具, 它整合了chkconfig 与 service功能于一体.示例:systemctl is-enabled iptables.se ...
- CSS基础:层叠顺序和层叠上下文
简介 在考虑到两个元素可能重叠的情况下,层叠顺序决定了那个元素在前面,那个元素在后面,这是针对普通元素而言.而层叠上下文和块级格式化上下文 (BFC) 一样,基本上也是由一些 CSS 属性创建的,它单 ...
- OO开发思想:面向对象的开发方法(Object oriented,OO)
面向对象的开发方法(Object oriented,OO)认为是好文章吧,拿来分享一下(转载) 面向对象的开发方法(Object oriented,OO) 从事软件开发的工程 师们常常有这样 的体会: ...
- NIO 多线程
本文可看成是对Doug Lea Scalable IO in Java一文的翻译. 当前分布式计算 Web Services盛行天下,这些网络服务的底层都离不开对socket的操作.他们都有一个共同的 ...
- java -- 对Map按键排序、按值排序
java -- 对Map按键.按值排序 1.按键排序(sort by key) 直接上代码 ↓ public Map<String, Str ...
- Roundcube Webmail File Disclosure Vulnerability(CVE-2017-16651)
Preface Software: https://roundcube.net/ Versions: 1.1.0 - 1.1.9, 1.2.0 - 1.2.6, 1.3.0 - 1.3.2 CVE: ...
- SSM博客登录注册
我的博客采用的是 spring+springmvc+mybatis框架,用maven和git管理项目,之后的其他功能还有待进一步的学习. 首先新建一个maven项目,我的项目组成大概就这样, 建立好项 ...
- 设计模式的征途—13.代理(Proxy)模式
所谓代购,简单说来就是找人帮忙购买所需要的商品.代购分为两种类型,一种是因为在当地买不到某件商品,又或者是因为当地这件商品的价格比其他地区的贵,因此托人在其他地区甚至国外购买该商品,然后通过快递发货或 ...
- Robot Framework自动化_Selenium2Library 关键字
Robot Framework自动化_Selenium2Library 关键字 培训老师:肖能尤 2016/06/12 课程目的 一.Robot framework Selenium2Library ...
- 易用性测试、本地化测试、部署测试、无障碍测试、回归测试、冒烟测试、A/B测试
1.易用性定义: 易用性测试是指测试用户使用软件时是否感觉方便,是否能保证用户使用的测试类型2.本地化测试: ·定义:针对软件的本地化版本实施的针对性测试 ·测试内容: (1)语言,书写习惯 (2)时 ...