java-Java byte或short类型赋值的小问题

问题描述

Java byte或short类型赋值的小问题

把一个整数常量(其值在byte类型的表数范围内)赋值给byte类型变量,系统会把整数常量当做byte类型来处理还是当做int来处理
查了一些资料,一部分是直接当做byte类型处理,一部分说是当做int类型处理然后数据类型转换
byte b = 3;

解决方案

Java byte或short类型赋值时本质是作为int进行处理的,例如你定义了一个byte b = 120;
你可以反编译看代码javap -c查看编译后的字节码指令,这个本质上是作为int类型进行处理的。

解决方案二:

http://ideone.com/HCUZVC
看这个代码

byte b= 257;
无法编译

说明对于常数,编译器是直接编译的,而不是运行时的转换,所以根本不让编译。

    int x = 3;
    byte b = x;

此时x是int变量,编译器提示
incompatible types: possible lossy conversion from int to byte

同样不能编译。如果要通过编译,需加上转换

byte b = (byte)x;

这个转换显然发生在运行时。

解决方案三:

你好
常量超出数据类型表数范围的情况我大致了解一点,不明白的是在表数范围内的情况
我以为常量赋值给byte或short类型时会有一个数据检测,如果超出了范围就该常量就作为int类型数据处理
byte b= 257;——“Type mismatch: cannot convert from int to byte”
如果常量数值在范围内就蒙了...

时间: 2024-11-05 18:43:34

java-Java byte或short类型赋值的小问题的相关文章

JAVA中byte 、short为什么能赋常量的值,却不能赋变量的值

问题描述 JAVA中byte .short为什么能赋常量的值,却不能赋变量的值 byte b1= 1; byte b2 =2; byte b3 =b1+b2; 这种编译为什么会报错,求指导? 解决方案 道理很简单,两个byte相加的结果byte未必能装下.比如byte b1 = 129; byte b2 = 129; 你说 byte b = b1 + b2 = ? 解决方案二: b1和b2相加的结果值默认是int类型的,改为这样就正确了;byte b3 = (byte)(b1+b2); 解决方案

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

基于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

编程-Eclipse环境下编写Java程序,使用float类型的数据为什么无法进行算数运算?

问题描述 Eclipse环境下编写Java程序,使用float类型的数据为什么无法进行算数运算? float f=5+5.5; 或者 float f ; f= 1*5.5; 这两个均会报错,我就纳闷了.为什么这样不行?后来我又试了: int a= 5; float f ; f= a*5.5; 还是不行,报错的语句就是给f赋值的语句. 请问为什么?C++下亲测这三者均可运行,难道这是Java的特性吗?不可能啊,如果这种操作都会编译报错,那这float基本上就没用处了,这太不科学了. 为了避免一些网

NoSQL之Redis(二)---Java操作Redis存储自定义类型数据

NoSQL之Redis(二)---Java操作Redis存储自定义类型数据            Redis简介            Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案.            Redis从它的许多竞争继承来的三个主要特点: Redis数据库完全在内存中,使用磁盘仅用于持久性. 相比许多键值数据存储,Redis拥有一套较为丰富的数据类型. Redis可以将数据复制到任意数量的从服务器.           

string-关于java中byte 超出表示范围了

问题描述 关于java中byte 超出表示范围了 String s = Integer.toHexString(number); byte b = Byte.parseByte(s,16); 但是java中byte的范围不是-128~127吗, 请问怎么表示比如128 解决方案 解决方案二: 你可以试下,如果number大于127的话,就会报Value out of range(数值超出范围)的错误. 如果估计数据可能超出-128~127这个范围的话,你就需要考虑用int b 而不是byte b

字符-java 中byte数组转换问题,求思路

问题描述 java 中byte数组转换问题,求思路 现在做的项目有一个byte数组转换的问题,思考很久没有思路,求各路大神给点意见. 需求 :将一个byte数组中的每个元素拆分成两个byte.分别保存前一个byte中的16进制两位的内容的ascii码. 事例 : byte[] a = {0x24,0xBD}; byte[] b = new byte[4]; 想得到的结果: b[0] == 0x32; b[1] == 0x34; b[2] == 0x42; b[3] == 0x44;

java操作Excel处理数字类型的精度损失问题验证

java操作Excel处理数字类型的精度损失问题验证: 场景: CELL_TYPE_NUMERIC-->CELL_TYPE_STRING--->CELL_TYPE_NUMERIC POI版本:poi-3.10.1poi-3.9 Code: package poi; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.i

Java 8中的Optional 类型与 Kotlin 中的可空类型

Java 8中的Optional 类型与 Kotlin 中的可空类型 在 Java 8中,我们可以使用 Optional 类型来表达可空的类型. package com.easy.kotlin; import java.util.Optional; import static java.lang.System.out; /** * Optional.ofNullable - 允许传递为 null 参数 * Optional.of - 如果传递的参数是 null,抛出异常 NullPointerE