Java基础(010):原始数据类型隐式转换的一些场景

  日常开发中经常接触到的数据类型转换主要有这2种:
  • 原始数据类型之间的转换
  • 字符串、原始数据类型、日期类型之间的转换
 
  对于原始数据类型之间的转换,从代码是否直接使用强制转换来看,又分为显式转换和隐式转换,即
  • 自动类型转换/隐式类型转换:编译器自动添加的类型转换
  • 强制类型转换/显式类型转换:代码中直接写出需要强制转换的类型
 
  接下来主要列举原始数据类型隐式转换的一些场景:
  • 所有byte、char、short类型的计算都默认提升到int类型再计算:
    • byte + byte → int
    • byte + char → int
    • byte + short → int
    • char + char → int
    • char + short → int
    • short + short → int
    • byte/char/short + int → int
  • 如果参与计算的有long类型,则会提升至long类型进行计算:
    • byte + long → long
    • char + long → long
    • short + long → long
    • int + long → long
  • 常量整数默认是int类型,只要在对应的 byte / char / short 范围内的,都可以默认转换,如 byte b = 1;,除非超过对应类型的范围
    • The literal 2147483648 of type int is out of range
  • 小范围数据类型向大范围数据类型赋值也是可以直接转换的(跳跃转换也可以)
    • byte → short → int → long → float → double
    • char → int → long → float → double
  • 部分运算符会有默认转换,如 ++、--、+=、-=、/=、*=、%= 等(最后的结果强制转换后可能存在精度损失)。
 
  原始数据类型的类型转换可以参考Java语言规范相关说明:

posted @ 2021-03-14 22:14  心明谭  阅读(139)  评论(0编辑  收藏  举报