byte-关于自动提升int类型疑问?

问题描述

关于自动提升int类型疑问?

byte b1= 1;
byte b2 =2;
byte b3 =b1+b2;
这种编译为什么会报错,求指导?

解决方案

当使用+、-、*、/、%运算符对基本类型进行运算时,遵循如下规则:
只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型;
否则,只要两个操作数中有一个是float类型的,另一个将会被转换成float类型,并且结果也是float类型;
否则,只要两个操作数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型;
否则,两个操作数(包括byte、short、int、char)都将会被转换成int类型,并且结果也是int类型。

当使用+=、-=、*=、/=、%=、运算符对基本类型进行运算时,遵循如下规则:
运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型,然后再执行运算,且运算结果与运算符左边数值类型相同。

比如上面 b3+=b1;b3+=b2;这样都是没问题的。

解决方案二:

b1,b2相加后可能超过byte范围。

解决方案三:

byte 只能是0 或是1 吧?

解决方案四:

以下的代码会不会报错呢?

byte b1= 1;
byte b2 =2;
byte b3 =(byte)(b1+b2);

解决方案五:

编译器这么规定的。
byte b3 =(byte)((b1+b2)%256);

解决方案六:

b1+b2只能用整数来接收,而整数到byte不能隐式转换。还有那个说byte只能是0和1的,实在太扯了。

时间: 2024-08-13 07:15:44

byte-关于自动提升int类型疑问?的相关文章

基于java中byte数组与int类型的转换(两种方法)_java

java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形int转换成byte数组,同时如何把一个长度为4的byte数组转换为int类型.下面有两种方式. public static byte[] int2byte(int res) { byte[] targets = new byte[4]; targets[0] = (byte) (res & 0xf

Java表达式类型自动提升

[一道经典的Java面试题] short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 答案是:前者错,后者对.相信不管是否经历过java面试过,大家一定对这道题很熟悉.因为这道题确实太经典了,以至于成为了基本每个老师都会拿出来,当作课堂例题来讲.要说清这道题,首先看看java表达式类型转换规则. [java表达式类型转换] java是一门强类型语言,不仅每个变量具有指定的数据类型,它的表达式也有指定的数据类型.因此在不同类型之间进行

Java中涉及byte、short和char类型的运算操作

运算 Java中涉及byte.short和char类型的运算操作首先会把这些值转换为int类型,然后对int类型值进行运算,最后得到int类型的结果.因此,如果把两个byte类型值相加,最后会得到一个int类型的结果.如果需要得到byte类型结果,必须将这个int类型的结果显式转换为byte类型.例如,下面的代码会导致编译失败: class BadArithmetic {      static byte addOneAndOne() {        byte a = 1;        by

Entity Framework 5.0 调用存储过程 返回值为什么是int类型

问题描述 用VS2012+EntityFramework5.0生成代码但是生成的存储过程返回值有问题为什么生成的存储过程返回值为int类型??存储过程中操作复杂最后返回几个字段值.publicvirtualintGetMenuByRID(Nullable<int>rID){varrIDParameter=rID.HasValue?newObjectParameter("RID",rID):newObjectParameter("RID",typeof(i

hibernate-出现java的int类型范围异常

问题描述 出现java的int类型范围异常 请教大家一个问题,查数据的时候出现了这个错误,'1.50301132741E11' in column '7' is outside valid range for the datatype INTEGER.,百度的时候说是JAVA 读数据库时候用的是rs.getInt(i) 取出的结果超出了INT的范围,但是我用的hibernate,这个要怎么改,而且java的int类型范围不是2的32次方怎么还可能超过呢?? 解决方案 整数类型有范围的 数据类型

由于“int”类型的值永不等于“int?”类型的“null”,该表达式的结果始终为“true”

问题描述 usingSystem;usingSystem.Data;usingSystem.Data.SqlClient;usingSystem.Configuration;usingSystem.Collections.Generic;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.HtmlControls;usingSystem.Web.UI.WebControls;usingSys

如何把String temp = request.getParameter(&amp;amp;quot;id&amp;amp;quot;); 转换为int类型

问题描述 在jsp的servlet类中,写了如下语句Stringp=request.getParameter("pscore");inti=Ingeter.parseInt(p);//这条语句报错了"cantcovertfromIntegertoint"但是上面的语句改成inti=Integer.valueOf(p);编译就通过了这是为什么?request.getParameter()获取的参数不应该是String类型的吗?而integer.parseInt()中的

mysql把主键定义为自动增长标识符类型_Mysql

1.把主键定义为自动增长标识符类型 在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如: create table customers(id int auto_increment primary key notnull, name varchar(15)); insert into customers(name) values("name1"),("name2"); 一旦把id设为auto_increment类型,my

Mysql数据库中把varchar类型转化为int类型的方法_Mysql

在上篇文章给大家讲了MySQL数据库中把int转化varchar引发的慢查询,本文给大家介绍Mysql数据库中把varchar类型转化为int类型的方法,一起看看吧! mysql为我们提供了两个类型转换函数:CAST和CONVERT,现成的东西我们怎能放过? CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值. 这个类型 可以是以下值其中的 一个: BINARY[(N)] CHAR[(N)] DATE DATETIME DECIMAL SIGNED [INTEG