首页 > 编程语言 >java中的基本数据类型自动转换

java中的基本数据类型自动转换

时间:2024-10-18 10:47:54浏览次数:8  
标签:java int 数据类型 System 自动 println 转换

java中的基本数据类型自动转换

在Java中,基本数据类型的自动转换(也称为隐式类型转换或提升)是指小范围的数据类型能够自动转换为更大范围的数据类型,而无需进行显式转换(即不需要编写类型转换的代码)。这种自动转换主要发生在数值类型之间,包括整型(byte、short、int、long)、浮点型(float、double)以及字符型(char)与其他数值类型之间的转换。但需要注意的是,并不是所有基本数据类型之间都可以进行自动转换,比如布尔类型(boolean)就不能自动转换为其他任何类型。

基本数据类型自动转换的原理

在Java中,基本数据类型按照它们能够表示的数据范围从小到大排列,依次为:

1. byte
2. short
3. char
4. int
5. long
6. float
7. double

当进行算术运算或赋值时,如果操作数或赋值右侧的表达式的类型比左侧变量的类型有更宽的数据范围,就会发生自动类型转换。这种转换是安全的,因为它不会导致数据溢出或丢失(尽管在某些情况下,精度可能会降低,比如从int到float的转换,但由于float的范围大于int,所以这里讨论的是数据范围的扩展)。

示例代码与注释

示例1:整型之间的自动转换

  1. public class AutoTypeConversionExample {
  2.     public static void main(String[] args) {
  3.         byte b = 10;
  4.         short s = b; // byte自动转换为short
  5.         int i = s;   // short自动转换为int
  6.         long l = i;  // int自动转换为long
  7.         // 尝试将更大的类型赋值给更小的类型时,需要显式转换
  8.         // byte b2 = l; // 这将编译错误,需要显式转换,如:(byte)l
  9.         System.out.println("b = " + b);
  10.         System.out.println("s = " + s);
  11.         System.out.println("i = " + i);
  12.         System.out.println("l = " + l);
  13.     }
  14. }


 

在这个例子中,我们看到了byte、short、int、long之间的自动转换。注意,从更大的类型(如long)赋值给更小的类型(如byte)时,需要显式进行类型转换,否则会导致编译错误。

示例2:整型与浮点型之间的自动转换

  1. public class AutoTypeConversionFloatExample {
  2.     public static void main(String[] args) {
  3.         int i = 10;
  4.         float f = i; // int自动转换为float
  5.         double d = f; // float自动转换为double
  6.         System.out.println("f = " + f);
  7.         System.out.println("d = " + d);
  8.     }
  9. }


 

这个示例展示了从int到float,再从float到double的自动转换。需要注意的是,虽然这种转换是自动的,但从int到float的转换可能会导致精度的轻微损失,因为float类型只能存储大约7位十进制有效数字。

示例3:char与整型之间的自动转换

  1. public class AutoTypeConversionCharExample {
  2.     public static void main(String[] args) {
  3.         char c = 'A'; // char实际上是一个特殊的整型,表示Unicode字符
  4.         int i = c;    // char自动转换为int(实际上转换为其Unicode码点)
  5.         System.out.println("c (as char) = " + c);
  6.         System.out.println("c (as int) = " + i); // 打印'A'的Unicode码点,通常是65
  7.     }
  8. }


 

在这个例子中,我们看到了char类型与int类型之间的自动转换。char类型在Java中被视为一个特殊的整型,它用于存储Unicode字符。当char被赋值给int时,它会自动转换为其对应的Unicode码点。

  • 强制类型转换

在Java中,强制类型转换(也称为显式类型转换)是指将一种数据类型的值显式地转换为另一种数据类型,这种转换通常在数据类型之间不存在自动转换的情况下进行。强制类型转换可能会导致数据丢失或精度下降,因此在使用时需要特别小心。

强制类型转换的基本语法

(目标类型) 变量名;


 

或者

(目标类型) 值;


 

示例1:从大到小的整数类型转换

  1. public class ForcedTypeConversionExample {
  2.     public static void main(String[] args) {
  3.         long l = 1234567890L; // 使用L后缀来表示long类型
  4.         int i = (int) l; // 将long类型的l强制转换为int类型,注意这里可能会丢失数据
  5.         System.out.println("原始long值: " + l);
  6.         System.out.println("强制转换后的int值: " + i); // 注意,这里只打印了int类型能表示的部分
  7.         // 示例:如果l的值超出了int的表示范围,结果将是int类型的最大值或最小值(取决于符号)
  8.         // 但在这个例子中,l的值在int的表示范围内,所以只是简单地截断了超出int位数的部分
  9.     }
  10. }


 

示例2:从浮点型到整型的转换


 

  1. public class FloatToIntConversion {
  2.     public static void main(String[] args) {
  3.         double d = 3.14159;
  4.         int i = (int) d; // 将double类型的d强制转换为int类型,小数部分将被丢弃
  5.         System.out.println("原始double值: " + d);
  6.         System.out.println("强制转换后的int值: " + i); // 输出为3
  7.     }
  8. }

示例3:从对象类型到子类的转换(注意:这不是基本数据类型的转换,但展示了强制类型转换的概念)

  1. class Animal {
  2.     // ...
  3. }
  4. class Dog extends Animal {
  5.     // ...
  6. }
  7. public class AnimalToDogConversion {
  8.     public static void main(String[] args) {
  9.         Animal myAnimal = new Dog(); // 向上转型(隐式转换)是安全的
  10.         Dog myDog = (Dog) myAnimal; // 向下转型(强制转换)需要显式进行,且只有在对象是Dog的实例时才是安全的
  11.         // 如果myAnimal不是Dog的实例,上面的转换将抛出ClassCastException
  12.         System.out.println("转换成功,myDog是一个Dog对象");
  13.     }
  14. }


 

注意:在将对象类型强制转换为子类类型时,必须确保原始对象确实是目标类型的实例,否则将在运行时抛出`ClassCastException`。

原文链接:https://blog.csdn.net/qa3629723/article/details/140798212

标签:java,int,数据类型,System,自动,println,转换
From: https://www.cnblogs.com/sunny3158/p/18473816

相关文章

  • DeviceNet转Profibus DP总线协议转换网关
    一,设备主要功能捷米特JM-DP-DNT网关实现DeviceNet从站设备接入到ProfibusDP网络;也可作为DeviceNet从站,将DeviceNet主站设备接入到Profibus网络。应用广泛:捷米特JM-DP-DNT广泛应用于支持DeviceNet接口的罗克罗尔,欧姆龙,基恩士PLC等主站控制器等等。DeviceNet从站转ProfibusD......
  • 189基于java ssm springboot网上餐厅订餐系统(源码+文档+运行视频+讲解视频)
       文章目录系列文章目录前言一、详细视频演示二、项目部分实现截图三、技术栈后端框架springboot后端框架springboot持久层框架MyBaitsPlus系统测试四、代码参考源码获取前言......
  • 184基于java ssm springboot零食批发商仓库管理系统零食出入库(源码+文档+运行视频+讲
      文章目录系列文章目录前言一、详细视频演示二、项目部分实现截图三、技术栈后端框架springboot后端框架springboot持久层框架MyBaitsPlus系统测试四、代码参考源码获取前言......
  • 192基于java ssm springboot校园消费餐厅食堂商家点评系统(源码+文档+运行视频+讲解视
      文章目录系列文章目录前言一、详细视频演示二、项目部分实现截图三、技术栈后端框架springboot后端框架springboot持久层框架MyBaitsPlus系统测试四、代码参考源码获取前言......
  • JavaScript 数据类型转换全解析:转换为数值、字符串与布尔型
    目录非VIP用户可前往公众号“前端基地”进行免费阅读转换为数值型转换为数值型Number()函数parseInt()函数parseFloat()函数转换为字符串型转换方法toString()函数String()函数转换为布尔型转换方法Boolean()函数非VIP用户可前往公众号“前端基地”进行免......
  • 109. 有序链表转换二叉搜索树【二叉树】
    文章目录109.有序链表转换二叉搜索树解题思路Go代码109.有序链表转换二叉搜索树109.有序链表转换二叉搜索树给定一个单链表的头节点head,其中的元素按升序排序,将其转换为平衡二叉搜索树。平衡二叉树是指该树所有节点的左右子树的深度相差不超过1。示例......
  • 每日OJ题_牛客_非对称之美_最长非回文字符串_C++_Java
    目录牛客_非对称之美_最长非回文字符串题目解析C++代码Java代码牛客_非对称之美_最长非回文字符串非对称之美(nowcoder.com)题目解析找到规律就是最长非回文字符串(判断是否全同->0,否则是n-1(回文减去1)或n)。C++代码#include<iostream>usingnamespacestd;int......
  • Java小白初探斗地主
    一、前言本人Java小白,一直想做一个斗地主游戏,正好最近学习到了集合。我们都知道集合分为(Collection(单列集合)家族和Map(双列/映射集合)家族)有着长度可变的特性,用来存储斗地主的卡牌再适合不过了。于是今天从下午五点多写到了晚上,主要是中间有几个地方把我卡住了很长时间。二、......
  • JavaScript初级课程 variables
    下载node。1.申明变量variables.jsletmessage="Hello!";message="World";console.log(message);nodevariables.js2.申明不会变的变量constCOLOR_GREEN="green";console.log(COLOR_GREEN)3.数据类型DataTypes=[number,BigInt,string......
  • 适用于 Windows 10 / 11 的 5 个最佳免费 PDF 转 Word 转换器
     PDF转Word转换器PDF文件是共享文档的首选格式,但是,此类文件存在限制,因此难以修改或编辑。因此,您可能会发现自己正在寻找一种将PDF文件转换为Word或其他可编辑格式的方法。市面上有许多不同的PDF转换器,每一种都提供略有不同的功能。本文将介绍您可能需要PDF转换......