博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java之基本数据的类型转换
阅读量:5098 次
发布时间:2019-06-13

本文共 1527 字,大约阅读时间需要 5 分钟。

自动类型提升

1.boolean不允许进行类型转换

布尔类型boolean占有一个字节,由于其本身的特殊含义,使得与其他基本类型不能进行类型的转换(既不能进行自动类型的提升,也不能强制类型转换),否则将编译出错。
 

2.数值范围小的类型→数值范围大的类型,JVM在编译过程中负责对数值类型进行自动提升

byte a = 1000;   // 编译出错 Type mismatch: cannot convert from int to byte float b = 1.5;   // 编译出错 Type mismatch: cannot convert from double to float byte c = 3;      // 编译正确
【例外】前两句很好理解,但int赋值byte类型编译正确是因为:

int→(byte/char/short)的类型转换在一定条件下不需强制转换

JVM
在编译过程中,默认为int类型的数值赋值给一个比int型数值范围小的数值类型变量(在此统一称为数值类型k,k可以是byte/char/short类型)会进行判断,若此int型数值超过k的范围,则会直接编译出错。但若此int型数值尚在数值类型k范围内,jvm会自定进行一次隐式类型转换,将此int型数值转换成类型k。
 

3.byte→char,char→short不进行自动类型提升

由于数值范围的原因,使得byte、short与char之间无法进行类型转换,但byte可以提升至short类型。
 

4.数据的默认类型

Java中,整数类型(byte/short/int/long)对于未声明数据类型的整形默认为int
类型
;浮点类型(float/double)默认为double类型。
long a = 10000000000; //编译出错: The literal 10000000000 of type int is out of range
10000000000默认数据类型是int,而int的数值范围是-2^31 ~ 2^31-1,显然超出范围,所以编译报错,这里只需要申明自生默认类型即可。-----long a = 10000000000L; //编译正确
 
 

数值类型的强制转换

1.强制类型转换一数值类型转换至范围更低,可能会丢失精度

byte p = 3; // 编译正确:int到byte编译过程中发生隐式类型转换 int a = 3; byte b = a; // 编译出错:cannot convert from int to byte byte c = (byte) a; // 编译正确 float d = (float) 4.0;
分析:b=a编译报错是因为 a是变量,编译期无法确定。
 

2.强制类型转换的原理分析

int a = 233; byte b = (byte) a; System.out.println("b:" + b);  // 输出:-23
分析:233的二进制表示为:24位0+11101001,byte只有8位, 从高位开始舍弃得到:11101001,由于最高位为符号位,1表示负数,其相应数值表示为-23。
 
 

3.进行数学运算时,数据类型会自动提升到运算符左右之较大者

byte e = 10, f = 11; byte g = e + f; // 编译错误 +直接将10和11类型提升为了int byte h = (byte) (e + f);  //编译正确
 
关于强转丢失精度的相关底层原理可查看
 
 
 

转载于:https://www.cnblogs.com/linux007/p/5782712.html

你可能感兴趣的文章
判断对象类型 type()
查看>>
Php函数之end
查看>>
腾讯AB题
查看>>
C# 实现冒泡算法--不一定效率,但很容易理解
查看>>
如何开发AR增强现实应用与产品
查看>>
C++中遍历lua table
查看>>
JSP 9 大内置对象详解
查看>>
Android Spinner 绑定键值对
查看>>
Lambda 动态表达式(排序)
查看>>
IO流BufferedReader------BufferedWriter 高效缓冲区
查看>>
1008 Elevator
查看>>
选择客栈
查看>>
【题解】 bzoj1923: [Sdoi2010]外星千足虫 (线性基/高斯消元)
查看>>
tamcat:设置后台启动
查看>>
《101 Windows Phone 7 Apps》读书笔记-NOTEPAD
查看>>
简单说springmvc的工作原理
查看>>
奋斗的小蜗牛
查看>>
poj3723 Conscription
查看>>
Python 编程快速上手 第 7章 模式匹配与正则表达式
查看>>
深度解析vuex
查看>>