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

发表于:2018-5-28 09:27

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:R哥    来源:Java技术栈

#
java
分享:
  说基本数据类型转换之前,先了解下 Java 中的 8 种基本数据类型,以及它们的占内存的容量大小和表示的范围,如下图所示。
  重新温故了下原始数据类型,现在来解释下它们之间的转换关系。
  自动类型转换
  自动类型转换是指:数字表示范围小的数据类型可以自动转换成范围大的数据类型。
  如:
  long l = 100;  
  int i = 200;  
  long ll = i; 
  具体自动转换如如下图所示。
  实线表示自动转换时不会造成数据丢失,虚线则可能会出现数据丢失问题。
  自动转换也要小心数据溢出问题,看下面的例子。
  int count = 100000000;  
  int price = 1999;  
  long totalPrice = count *  
  price; 
  编译没任何问题,但结果却输出的是负数,这是因为两个 int 相乘得到的结果是 int, 相乘的结果超出了 int 的代表范围。这种情况,一般把第一个数据转换成范围大的数据类型再和其他的数据进行运算。
  int count = 100000000;  
  int price = 1999;  
  long totalPrice = (long) count * price; 
  另外,向下转换时可以直接将 int 常量字面量赋值给 byte、short、char 等数据类型,而不需要强制转换,只要该常量值不超过该类型的表示范围都能自动转换。
  强制类型转换
  强制类型转换我们再清楚不过了,即强制显示的把一个数据类型转换为另外一种数据类型。
  如:
  short s = 199;  
  int i = s; 
  // 199  
  double d = 10.24;  
  long ll = (long) d;  
  // 10 
  以上的转换结果都在我们的预期之内,属于正常的转换和丢失精度的情况,下面的例子就一样属于数据溢出的情况。
  int ii = 300;  
  byte b = (byte)ii; 
  300 已经超出了 byte 类型表示的范围,所以会转换成一个毫无意义的数字。
  类型提升
  所谓类型提升就是指在多种不同数据类型的表达式中,类型会自动向范围表示大的值的数据类型提升。
  把上面的溢出的例子再改下。
  long count = 100000000;  
  int price = 1999;  
  long totalPrice = price * count; 
  price 为 int 型,count 为 long 型,运算结果为 long 型,运算结果正常,没有出现溢出的情况。



上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号