美文网首页
Java面试 - 整型之间的转换

Java面试 - 整型之间的转换

作者: 程序猿蛋蛋哥 | 来源:发表于2021-02-10 23:18 被阅读0次
程序员的快乐.jpeg

目录

  • 整型之间的转换总结:
  • 整型的值范围
  • 整型的隐式转换
  • 整型之间的转换
      1. char类型转换为byte、short时,必须使用显式类型转换
      1. 当byte,char或者short类型(或为三者的混合)参与运算时,结果为int类型,而并非与较高的类型相同
      1. byte转char比较特殊,先将byte扩展到int,然后再收缩到char,即扩展收缩转换

整型之间的转换总结:

  1. 如果变量的类型是byte、short或char类型,当对其赋予编译时期的常量,而该常量又没有超过变量的取值范围时,编译器就可以进行隐式的收缩转换。这种隐式的收缩转换是安全的,因为该收缩转换只适用于变量的赋值,而不适用于方法调用语句,即不适用于方法调用时的参数传递。

  2. 注意char类型,是一个无符号类型。因此,char与short,char与byte之间的转换都必须显式地使用类型转换。

  3. 从byte到char的转换为扩展收缩转换,该转换比较特殊,即先将byte扩展转换到int,然后再收缩转换到char。

  4. 在整型数据间的扩展转换中,如果操作数是char类型(无符号类型),则进行无符号扩展,扩展位为0;如果操作数是byte、short或int(有符号类型),则进行有符号扩展,扩展位为该变量的符号位。

  5. 整型数据之间的收缩转换,仅仅是截断并丢弃高位,不做任何其他处理。


整型的值范围

byte:8位(一个字节8位),值范围:-2⁷~ 2⁷, 即 -128 ~ 127

char:16位,无符号类型,能表示的数值范围为:0 ~ (2¹⁶-1) ,即 0 ~ 65535

// char类型的最小值,Unicode的'\u0000'表示的是空字符,十进制数字表示的是0
public static final char MIN_VALUE = '\u0000';
// char类型的最大值,Unicode的'\uFFFF'转换为十进制数字时,直接进行无符号位扩展到32位,即表示的数值为65535
public static final char MAX_VALUE = '\uFFFF';

short:16位,值范围:-2¹⁵ ~ (2¹⁵-1),即 -32768 ~ 32767

int:32位,值范围:-2³¹ ~ (2³¹-1),即 -2147483648 ~ 2147483647

long:64位,值范围:-2⁶³ ~ (2⁶³-1),即 -9223372036854775808 ~ 9223372036854775807


整型的隐式转换

编译时的整型字面常量(int类型),如果将其赋值给比 int 类型低的变量类型(byte、short或char),而整型字面常量的值没有超过该变量类型的取值范围,那么编译器就可以做隐式类型转换。

byte b = 1; // 隐式类型转换,byte值范围为:-128 ~ 127,1在此范围内 
char c = 1; // 隐式类型转换,char能表示的数值范围为:0 ~ 65535,1在此范围内
short s = 1; // 隐式类型转换,short值范围为:-32768 ~ 32767,1在此范围内

编译错误
byte b1 = 128; // 编译错误,128超过了byte值范围,产生编译错误

int i = 1;
以下产生编译错误,i不是整型字面常量,不能做隐式转换,必须显式强转
byte b2 = i; // 编译错误,必须显式强转:byte b2 = (byte) i;
char c2 = i; // 编译错误,必须显式强转:char c2 = (char) i;
short s2 = i; // 编译错误,必须显式强转:short s2 = (short) i;

隐式转换的条件总结:

  • 整型字面常量
  • 整型字面常量的值没有超过要转类型的取值范围
  • 只适用对变量赋值,不适用于方法调用语句

整型之间的转换

1. char类型转换为byte、short时,必须使用显式类型转换

char类型是无符号类型,值范围是:0 ~ 65535,与byte(-128 ~ 127),short(-32768 ~ 32767)类型不存在子集关系,因此char类型与其他两种类型之间的转换必须使用显式类型转换。

char c = 'a';
byte b = (byte) c;
short s = (short) c;

2. 当byte,char或者short类型(或为三者的混合)参与运算时,结果为int类型,而并非与较高的类型相同

byte b = 100;
char c = 50;
short s = 200;
int t1 = b + c; // byte类型 + char类型,结果为int类型
int t2 = b + s; // byte类型 + short类型,结果为int类型
int t3 = c + s; // char类型 + short类型,结果为int类型

3. byte转char比较特殊,先将byte扩展到int,然后再收缩到char,即扩展收缩转换

<1> 扩展转换:

在整型数据间的扩展转换中,如果操作数是char类型(无符号类型),则进行无符号扩展,扩展位为0
如果操作数是byte、short或int(有符号类型),则进行有符号扩展,扩展位为该变量的符号位。

<2> 收缩转换:

整型数据之间的收缩转换,仅仅是截断并丢弃高位,不做任何其他处理。

相关文章

  • Java面试 - 整型之间的转换

    目录 整型之间的转换总结: 整型的值范围 整型的隐式转换 整型之间的转换char类型转换为byte、short时,...

  • java 类型转换

    整型数转化为字符串 字符串转化为整型数 收集的Java类型转换工具

  • Java经典面试题

    JAVA面试题 如何在string和int之间转换? String myString = "1234";int f...

  • JAVA的类型转换

    基本数据类型之间的转换(值转换) boolean类型不可以和其他基本数据类型进行转换 整型,字符型,浮点型之间的转...

  • java数据类型

    1、整型拓展 2、浮点数 3、类型转换 java强制类型转换和自动类型转换。自动类型转换是程序执行过程中自动进行转...

  • 2018-08-23 day4-循环和分支

    1.数据类型转换 自动转换 整型与浮点型数计算转换为浮点型 整型与bool型(0和1)计算转换为整型 强制转换 语...

  • Java实现atoi

    atoi(ascii to integer)将字符串转换成整型数,Java中提供了Integer.parseInt...

  • day04-python中的循环与分支结构

    01-数据类型转换 1、数据类型的自动转换(主要是整型和浮点型之间自动转换) 2、数据类型的强制转换格式:类型名(...

  • 【转载】20个非常有用的Java程序片段 - 编程语言

    1. 字符串有整型的相互转换Java代码 2. 向文件末尾添加内容Java代码 Java代码 4. 转字符串到日期...

  • Java中必须了解的常用类

    学习了解# Java中的包装类 Java中基本类型和包装类型之间的转换 Java中基本类型和字符串之间的转换 使用...

网友评论

      本文标题:Java面试 - 整型之间的转换

      本文链接:https://www.haomeiwen.com/subject/aallxltx.html