数据类型的转换可以分为隐式转换(自动类型转换)和显式转换(强制类型转换)两种。

隐式转换(自动类型转换)

满足2 个条件,那么将一种类型的数据赋给另外一种类型变量的时,将执行自动类型转换(automatic type conversion)。

 两种数据类型彼此兼容目标类型的取值范围大于源数据类型(低级类型数据转换成高级类型数据)

当满足以上 2 个条件时,自动转换(widening conversion)发生。例如 byte 类型向 short 类型转换时,由于 short 类型的取值范围较大,会自动将 byte 转换为 short 类型。

在运算过程中,由于不同的数据类型会转换成同一种数据类型,所以整型、浮点型以及字符型都可以参与混合运算。自动转换的规则是从低级类型数据转换成高级类型数据。转换规则如下:

 数值型数据的转换:byte→short→int→long→float→double。字符型转换为整型:char→int。

以上数据类型的转换遵循从左到右的转换顺序,最终转换成表达式中表示范围最大的变量的数据类型。

示例自动类型转换
顾客到超市购物,购买牙膏 2 盒,面巾纸 4 盒。其中牙膏的价格是 10.9 元,面巾纸的价格是 5.8 元,求商品总价格。

实现

public static void main(String[] args) {float price1 = 10.9f; // 定义牙膏的价格double price2 = 5.8; // 定义面巾纸的价格int num1 = 2; // 定义牙膏的数量int num2 = 4; // 定义面巾纸的数量double res = price1 * num1 + price2 * num2; // 计算总价System.out.println("一共付给收银员" + res + "元"); // 输出总价
}

上述代码中首先定义了一个 float 类型的变量存储牙膏的价格,然后定义了一个 double 类型的变量存储面巾纸的价格,再定义两个 int 类型的变量存储物品的数量,最后进行了乘运算以及和运算之后,将结果储存在一个 double 类型的变量中进行输出。

输出结果

一共付给收银员44.999923706055元

从执行结果看出,float、int 和 double 三种数据类型参与运算,最后输出的结果为 double 类型的数据。这种转换一般称为“表达式中类型的自动提升”。

使用一个显示的强制类型转换,例如:

byte b = 50;
b = (byte)(b*2);

这样就能产生正确的值 100。

注意:char 类型比较特殊,char 自动转换成 int、long、float 和 double,但 byte 和 short 不能自动转换为 char,而且 char 也不能自动转换为 byte 或 short。

显式转换(强制类型转换)

尽管自动类型转换是很有帮助的,但并不能满足所有的编程需要。例如,如果你需要将 double 型的值赋给一个 int 型的变量,你将怎么办?

这种转换不会自动进行,因为 double 型的变化范围比 int 型的要小。这种转换有使成为“缩小转换”,因为你肯定要将源数据类型的值变小才能适合目标数据类型。

所以当两种数据类型不兼容,或目标类型的取值范围小于源类型时,自动转换将无法进行,这时就需要进行强制类型转换。其语法格式如下:

(type)variableName

其中,type 为 variableName 要转换成的数据类型,而 variableName 是指要进行类型转换的变量名称,强制转换的实例如下:

int a = 3;
double b = 9.0;
a = (int)b;

上述代码中首先将 double 类型变量 b 的值强制转换成 int 类型,然后将值赋给 a,但是变量 b 本身的值是没有发生变化的。

在强制类型转换中,如果是将浮点类型的值转换为整数,直接去掉小数点后边的所有数字;而如果是整数类型强制转换为浮点类型时,将在小数点后面补零。

示例强制类型转换
顾客到超市购物,购买牙膏 2 盒,面巾纸 4 盒。其中牙膏的价格是 10.9 元,面巾纸的价格是 5.8 元,求商品总价格,在计算总价时采用 int 类型的数据进行存储。实现代码如下:

public static void main(String[] args) {float price1 = 10.9f;double price2 = 5.8;int num1 = 2;int num2 = 4;int res2 = (int) (price1 * num1 + price2 * num2);System.out.println("一共付给收银员" + res2 + "元");
}

在上例中,有 double 类型、float 类型和 int 类型的数据参与运算,其运算结果默认为 double 类型,题目要求的结果为 int 类型,因为 int 类型的取值范围要小于 double 类型的取值范围,所以需要进行强制类型转换。

输出结果

一共付给收银员44元

Java自动类型转换和强制类型转换相关推荐

  1. java类型转换答案,在java中支持两种类型的类型转换,自动类型转换和强制类型转换。父类转化为子类需要强制转换。...

    在java中支持两种类型的类型转换,自动类型转换和强制类型转换.父类转化为子类需要强制转换. 更多相关问题 计算机病毒通过()传染扩散得极快,危害最大. 当一个现象的数量由小变大,另一个现象的数量相反 ...

  2. JAVA语法——自动类型转换和强制类型转换

    package 自动类型转换和强制类型转换;public class 自动类型转换和强制类型转换 {public static void main(String[] args){byte b = 12 ...

  3. 【c语言】c语言的自动类型转换和强制类型转换

    前言--数据类型 在介绍数据类型转换之前,我们首先要清楚一个知识点:数据类型的级别高低. 我们所提到的数据类型,比如整数型int,浮点型float,它们在计算机中其实是以二进制–也就是0和1的方式存储 ...

  4. (基础)JavaScript类型转换(强制类型转换+隐式类型转换)

    JavaScript  中有五种基本数据类型(其中包括 String.Number.Boolean.Function.Symbol).三种对象类型(其中包括 Object.Date.Array)和两种 ...

  5. Java 自动转换和强制转换

    /*** 自动类型转换和强制类型转换* */public class Demo1 {public static void main(String[] args) {//自动类型转换short s =1 ...

  6. 类型转换、强制类型转换

    目录 一.类型转换 二.隐式类型转换 三.算术转换 四.降级 五.强制类型转换 一.类型转换 有些表达式的操作数在求值的过程中需要先转换成其他类型再进行运算,这一操作称为数据类型转换. 有些人会问,为 ...

  7. java的自动类型转换和强制类型转换

    在程序运行时,经常需要将一种数值类型进行转换成另一种类型.下面给出了一个合法的转换. 数值之间的合法转换 上图中有6个实心箭头,表示无信息丢失的转换,有三个虚箭头,表示可能有精度丢失的转换.例如123 ...

  8. Java数据类型转换:强制类型转换+自动类型转换

    数据类型的转换是在所赋值的数值类型和被变量接收的数据类型不一致时发生的,它需要从一种数据类型转换成另一种数据类型.数据类型的转换可以分为隐式转换(自动类型转换)和显式转换(强制类型转换)两种. Jav ...

  9. java自动类型转换与强制类型转换

    基本数据类型从小到大排序 byte->short->int->long->float->double 1<2<4<8<4<8 char-&g ...

最新文章

  1. 基于图像到UV Map映射的3D手部高保真重建网络(ICCV2021)
  2. 一文看懂全球半导体格局
  3. java运行时异常中文_JAVA——运行时异常(RuntimeException)
  4. python接口自动化测试二十四:上传多个附件,参数化
  5. ASP.NET Web Game 构架设计3--业务逻辑服务器之计时器
  6. (二)原生JS实现 - 事件类方法
  7. 用Html 和 Css来实现一个小小案例
  8. python画图渐变颜色的代号_plt绘图颜色渐变以及colormap
  9. 用java编写程序_用JAVA编写程序
  10. 浏览器和node的eventLoop的区别
  11. linux+shell+整数计算,Shell expr命令进行整数计算的实现
  12. 钢绞线的弹性模量的计算方法_钢绞线弹性模量的理论计算及其影响因素分析
  13. 如何做好aso优化,如何做好ASO关键词优化
  14. 触摸式计算机屏幕,触控屏笔记本好不好 触摸屏笔记本优缺点分析【详细介绍】...
  15. pythongui编程星期的中英文对照_编写一个程序,根据用户输入的一个英文字符翻译成相应的中文日期,如输入“M”返回“星期一”。...
  16. apache性能调优(转)
  17. 非正态分布数据转换成正态分布
  18. PaaS、IaaS 、SaaS、Bass、Fass、无服务的理解与区别
  19. 2021年超全超详细的最新大数据开发面试题,附答案解析
  20. 再谈Revit二次开发的可靠性和前景

热门文章

  1. linux批量切割图片,MAC中用Shell脚本批量裁剪各种尺寸的App图标
  2. 将命令结果赋给变量_不得不了解的quot;变量quot;(2)—— 变量的赋值
  3. Win11新特性:在平板锁屏界面还有酷炫的3D视差效果
  4. 腾讯视频如何设置定时关机
  5. IE或Chrome浏览器玩Xbox游戏能实现吗
  6. C++ std::remove/std::remove_if/erase用法探讨
  7. matlab矢量角度,MATLAB矢量,角度,图
  8. ga tsp matlab,遗传算法(GA)求解TSP问题MATLAB程序
  9. uvc能支持多大分辨率_华为手环B5测评:该有的功能一个不缺,甚至还能变身蓝牙耳机...
  10. c语言交通违章编程代码,C语言程序设计之交通处罚单管理系统 报告(内含代码).doc...