Java中关于Short,byte越界需要强转,int,long越界自动转为最小值。

转载 2018年04月15日 21:52:00

今天在编程中遇到这个问题: 
我们都知道byte类型的取值范围是-128—127,如果我在代码中定义一个byte类型的变量a,并且给他赋值127,及byte a = 127。我再定义一个byte b = a + 1;很显然它的值会超出byte的取值范围,而它会变成-128,(任何整型类型的最大值+1,结果返回该类型的最小值。) 
但是我们编程时这样定义,编译器会报错,而int类型则不会。


public class text1 {

    public static void main(String[] args) {

//      byte b = 127;
//      byte c = b + 1;     //这个地方会报错

//      short a = 32767;
//      short e = a + 1;

        int A = Integer.MAX_VALUE;
        int B = A + 1;


        long C = Long.MAX_VALUE;
        long D = C + 1;

//      System.out.println(c);
//      System.out.println(e);
        System.out.println(B);
        System.out.println(D);

        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

出现这种情况的原因是: 
Java虚拟机在进行整形变量运算时会先把计算出来的结果存在一个临时变量中,这个临时变量的类型为int类型,所以我们进行byte b = a + 1,时编译器会报错,因为我们没法把int类型的值直接转换为byte类型,必须进行强制转换:byte b = (byte)(a + 1);而int,long类型转换属于向上转型是自动进行的,所以编译器不会报错。

C# 多网卡 Server Listen

时间: 2004/5/20作者: Robert参考: MSDN电邮: zsc771120@yahoo.com.cn关键词: TcpListener IPEndPoint IPAddress IPAdd...
  • zzzsssccc
  • zzzsssccc
  • 2004-05-23 16:26:00
  • 1647

语言小知识-处理数据时 Byte[] 尽量转换为 int[] 防止数字大小越界,变为负数

Byte 为4个字节 则最大为 127 范围为 0-127 int 为8个字节 则最大为 255 范围为 0-255如果发过来的数据 超过 127 不如把 数据 强制转换为 in...
  • qq_33431368
  • qq_33431368
  • 2017-05-16 20:21:08
  • 503

java对byte,short,char,int,long运算时自动类型转化情况说明

大家都知道,在进行运算时,java会隐式的自动进行类型转化,那么有哪些情况会进行转化呢?总结如下: 一、算术运算符 单目运算符:+(取正)-(取负) ++(自增1) --(自减1) 1.1 +(...
  • tang9140
  • tang9140
  • 2014-11-06 16:39:20
  • 5289

java中long,int,short与byte数组之间的转换

转的两篇文章的实现都很全面里面有些细节不同,现在项目进度紧张.先保留以后整理. 文章一:http://hi.baidu.com/menglinxi_a/item/35a43d5d50e79212abf...
  • thanklife
  • thanklife
  • 2013-11-28 11:05:37
  • 16838

long、int和short与byte之间的转化

昨天有个朋友问我long转byte要怎么转,然后吃饭期间我问了身边的人,发现也不会转。所以我想有必要写一些位操作符和转化规则,同时还有一些不常用,但是源码中经常出现的操作符。不可能所有的都写出来,但是...
  • u012403290
  • u012403290
  • 2017-04-01 13:56:47
  • 936

Java中有关byte和String的转换笔记和byte[]到short、int、long的相互转换

Java中有关byte和String的转换笔记问题1:java中没有实现这种“byte a = 0xB2 --> String b = “B2””转换的简单实现需要自己实现。 答:自己编写的转换函数,...
  • s_ongfei
  • s_ongfei
  • 2007-06-14 18:55:00
  • 7472

byte、short和char隐式的转换为int

byte、short和char隐式的转换为intbyte a=1; byte b=3; byte c=a+b; byte d=1+3; 为什么byte c=a+b;这个不对。byte d=1...
  • gtzh110
  • gtzh110
  • 2015-09-18 23:46:11
  • 2253

JAVA中short和short相加自动转化为int

对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。 对于sho...
  • yihaouu
  • yihaouu
  • 2016-06-20 00:48:28
  • 2859

java中byte、short、int、long、float、double类型的取值范围

首先byte、short、int、long都是整数类型。      ①:byte占一个字节,也就是8位,而且byte 是有符号整形 用二进制表示时候最高位为符号位 0代表正数 1代表负数。 max...
  • jaychouandkobe
  • jaychouandkobe
  • 2015-03-20 16:57:40
  • 8157

关于类型转换、溢出、移位等操作的小总结

类型转换、溢出、移位等操作标签:c/c++类型转换 运算符两边操作数的类型转化 此时,操作数类型的转换规则如下:图中的横向箭头:针对运算符两边是同类型的数据(不同级别的类型当然也适用!)   表示...
  • hust_sheng
  • hust_sheng
  • 2015-12-26 22:30:41
  • 6680
收藏助手
不良信息举报
您举报文章:Java中关于Short,byte越界需要强转,int,long越界自动转为最小值。
举报原因:
原因补充:

(最多只允许输入30个字)