Java中的基本数据类型转换(自动、强制、提升)

开发 后端
说基本数据类型转换之前,先了解下 Java 中的 8 种基本数据类型,以及它们的占内存的容量大小和表示的范围。自动类型转换是指:数字表示范围小的数据类型可以自动转换成范围大的数据类型。

说基本数据类型转换之前,先了解下 Java 中的 8 种基本数据类型,以及它们的占内存的容量大小和表示的范围,如下图所示。

重新温故了下原始数据类型,现在来解释下它们之间的转换关系。

自动类型转换

自动类型转换是指:数字表示范围小的数据类型可以自动转换成范围大的数据类型。

如:

 

  1. long l = 100;  
  2. int i = 200;  
  3. long ll = i; 

 

具体自动转换如如下图所示。

实线表示自动转换时不会造成数据丢失,虚线则可能会出现数据丢失问题。

自动转换也要小心数据溢出问题,看下面的例子。

 

  1. int count = 100000000;  
  2. int price = 1999;  
  3. long totalPrice = count *  
  4. price; 

 

编译没任何问题,但结果却输出的是负数,这是因为两个 int 相乘得到的结果是 int, 相乘的结果超出了 int 的代表范围。这种情况,一般把***个数据转换成范围大的数据类型再和其他的数据进行运算。

 

  1. int count = 100000000;  
  2. int price = 1999;  
  3. long totalPrice = (long) count * price; 

 

另外,向下转换时可以直接将 int 常量字面量赋值给 byte、short、char 等数据类型,而不需要强制转换,只要该常量值不超过该类型的表示范围都能自动转换。

强制类型转换

强制类型转换我们再清楚不过了,即强制显示的把一个数据类型转换为另外一种数据类型。

如:

 

  1. short s = 199;  
  2. int i = s; 
  3. // 199  
  4. double d = 10.24;  
  5. long ll = (long) d;  
  6. // 10 

 

以上的转换结果都在我们的预期之内,属于正常的转换和丢失精度的情况,下面的例子就一样属于数据溢出的情况。

 

  1. int ii = 300;  
  2. byte b = (byte)ii; 

 

300 已经超出了 byte 类型表示的范围,所以会转换成一个毫无意义的数字。

类型提升

所谓类型提升就是指在多种不同数据类型的表达式中,类型会自动向范围表示大的值的数据类型提升。

把上面的溢出的例子再改下。

 

  1. long count = 100000000;  
  2. int price = 1999;  
  3. long totalPrice = price * count

 

price 为 int 型,count 为 long 型,运算结果为 long 型,运算结果正常,没有出现溢出的情况。 

责任编辑:庞桂玉 来源: Java技术栈
相关推荐

2011-05-26 14:27:56

java

2016-08-18 14:13:55

JavaScript基本数据引用数据

2010-10-08 09:02:03

JavaScript基

2010-04-27 11:03:39

Oracle Java

2022-10-27 20:42:04

JavaScripJava编程语言

2023-03-27 10:04:27

数据类型浮点型布尔型

2020-10-26 13:46:07

Java基础入门篇

2021-04-28 18:16:24

Rust数据类型

2017-02-27 08:34:09

JavaScript数据引用

2019-11-11 14:55:25

Redis数据类型命令

2021-04-13 08:42:29

C语言数据类型转换自动类型转换

2024-06-11 08:30:31

2009-08-14 11:15:45

C#基本数据类型

2024-11-12 13:01:46

2024-11-04 06:20:00

Redis单线程

2010-01-18 16:49:36

VB.NET基本数据类

2023-07-04 08:41:08

Redis数据类型

2010-09-06 17:35:43

SQL函数

2024-12-09 12:00:00

Python编程数据类型转换

2022-03-14 09:41:10

POJO类型系统
点赞
收藏

51CTO技术栈公众号