int类型和byte类型的强制类型转换

今天在读《Java网络编程》这本书的第二章 流 时,看到书中有一个地方关于int强制转换为byte类型时应注意的地方。这个地方有点细节,不过就应该把这种细节把握住。

情况是这样的,讲到InputStream的抽象方法read时,说到read返回一个int型,但实际是一个byte型的数据。这点从API也能考证。如图:

那么问题来了,int占4个字节,byte占1个字节,我们循环读取的时候将int型数组强制类型转换成byte时,会发生什么情况呢?代码如下:

1个字节占8位,既然实际返回的是byte类型的数据,那么强制类型转换int型截取低8位,对数据也不会造成影响。问题就出现在,如果再从byte型转换成int型呢?代码如下:

此时,j输出为-106。

这是因为在int强制转换为byte型数据时,会产生一个-128~127的有符号字节,而不是read方法返回的0~255的无符号字节。这个时候要注意代码应修改为:

一个小问题,重在积累。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java相关

Shell脚本编程

linux中的变量分为环境变量和普通变量,其中环境变量可以理解为全局变量,在所有shell的子程序中都可以引用,普通变量只能在自己的shell程序中使用,程序结...

24120
来自专栏日常学python

详解Python中的__init__和__new__的区别

使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__ 方法通常用在初始化一个类实例的时候。例如:

7310
来自专栏Redis源码学习系列

Redis源码学习之对象系统

在前面的文章中,我介绍了Redis的底层数据结构,但Redis对外提供的命令并没有直接使用它们,而是基于它们构建更高级的数据对象,总共包括5中对象类型,分别为【...

15430
来自专栏逆向技术

逆向知识第十二讲,识别全局变量,静态全局变量,局部静态变量,以及变量.

         逆向知识第十二讲,识别全局变量,静态全局变量,局部静态变量,以及变量. 一丶认识全局的 (静态变量 全局变量) 高级代码: int RetIn...

233100
来自专栏liulun

Nim教程【十二】

排除指定符号 一般情况下使用import语句,会把一个模块内的符号都导入进来 如果你像排除特定的符号(不想让某些符号被导入进来) 可以使用except子句 就像...

237100
来自专栏黑白安全

PHP中echo,print,print_r,var_dump有什么区别

1.echo输出字符串或者数字,接受参数列表,不是函数,没有返回值。如果只是输出,echo更快

9230
来自专栏武军超python专栏

2018年8月2日魔法方法,异常处理,类属性,类方法,静态方法

今天遇到的新单词: enterprise n企业 ********************************** 魔法方法; 魔法方法:已经具...

20230
来自专栏性能与架构

JS闭包

JS的闭包用法给开发带来了极大的便利,它的使用方式非常自然,以至于很多同学并不很了解闭包,却可以在实际开发中顺畅的使用了 例如下面的代码,给button添加...

43740
来自专栏coding

redis列表list类型详解

65820
来自专栏nnngu

015 反射中的 Class.forName() 与 ClassLoader.loadClass() 的区别

Class.forName() 与 ClassLoader.loadClass() 大家都知道是反射用来构造类的方法,但是他们的用法还是有一定区别的。 在讲区别...

27030

扫码关注云+社区

领取腾讯云代金券