基本类型转换和引用类型转换

news/2024/11/18 0:11:57/

文章目录

  • 前言
  • 基本类型转换
    • 自动数据类型转换
    • 强制数据类型转换
  • 引用数据类型转换
    • 向上转型
    • 向下转型


前言

提示:这里可以添加本文要记录的大概内容:

Java 中的类型转换可以分为基本类型转换和引用类型转换两种。
基本类型转换指的是将一种基本数据类型转换为另一种基本数据类型,例如将 int 类型转换为 double 类型。
引用类型转换则指的是将一个引用类型转换为另一个引用类型,例如将一个 Object 类型的对象转换为一个 String 类型的对象。在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

基本类型转换

Java数据类型转换是将一种数据类型的值转换为另一种数据类型的值。在Java中,数据类型转换可以分为两种:自动转换和强制转换。

①、自动转换是指将一个小的数据类型转换为一个大的数据类型

例如将byte类型转换为int类型。在这种情况下,Java会自动将小的数据类型转换为大的数据类型,不需要进行任何额外的操作。

byte、short、char 类型可以自动转换int 类型。
int 类型可以自动转换long 类型。
float 类型可以自动转换double 类型。

②、强制转换是指将一个大的数据类型转换为一个小的数据类型

例如将int类型转换为byte类型。在这种情况下,Java需要进行强制转换,也就是使用类型转换运算符(如(int)x)将大的数据类型转换为小的数据类型。

需要注意的是,当进行强制转换时,可能会发生数据丢失。

在Java基本语法中的基本数据类型中写过这些类型,但是除boolean类型外,其他的七种类型之间可以相互转换

数据类型的自动转换顺序图:
在这里插入图片描述

整数整体小于小数,因为小数有小数点,精确度更高

自动数据类型转换

小类型转大类型就是自动转换,在代码中不需要增加额外代码

//小类型的数据赋值给大类型的变量
int x = 10;
double y = x; //自动转换
System.out.println(d);//在一个运算公式中出现多种类型数据
//先将数据转换成公式中最大类型
byte a = 0;
int b = 0;
float c = 1.1f;float x = a+b+c;//因为float是这里面的最大类型

强制数据类型转换

需要增加额外代码

//大类型的数据赋值给小类型
//强制类型在赋值时,在数据前加上(要转换的目标类型)
//强制类型转换会丢失原数据的某一部分
int a = 1000;
byte b = (byte)a;System.out.println(b);double a = 10.5;
int b = (int)a;

byte、short、char之间不会相互转换,它们三者在计算时首先会转换为int类型;

引用数据类型转换

紧接上一篇:Java接口

向上转型

向上转型是指将一个子类的对象转换为其父类的对象。
Java 中的向上转型是安全的,不需要使用强制类型转换符,编译器会自动进行转换

【例】猫和老鼠

  1. 先定义一个父类,这里用动物类作为父类
public class Animal {
//父类public void sleep() {System.out.println("睡觉最重要");}
}
  1. 再定义一个子类,这里用Cat类作为子类
public class Cat extends Animal{
//子类public void catchMouse() {System.out.println("猫抓老鼠");}
}
  1. 定义一个接口实现类
public interface Flayable {
//接口void flying();}
  1. 接下来就是实现类
public class Tom implements Flayable{@Override   //自动生成(添加未实现的方法)public void flying() {System.out.println("汤姆想飞上树");}}
  1. 转换测试

引用类型之间必须有继承或实现关系才能互相转换
父类型和接口类型 高 上 大
子类型和实现类型 低 下 小

向上转型:直接赋值
不能调用子类或实现类增加的方法
只能调用父类或接口中定义的方法

public class 转换测试 {public static void main(String[] args) {Animal animal = new Cat(); animal.sleep();		}}

但是在写catchMouse()方法时没有提示,也就是说不允许调用

于是在Tom实现类中再写一个方法

public void beatDog() {System.out.println("汤姆收拾斯派克");}

回到测试类写一个接口和实现类之间的互相转型,先定义大类型

public class 转换测试 {public static void main(String[] args) {Animal animal = new Cat(); animal.sleep();//先定义大类型Flayable flayable = new Tom();flayable.flying();}
}

向下转型

向下转型是指把大的给小的,把上的给下的
Java 中的向下转型是不安全的,需要使用强制类型转换符进行转换。
在进行向下转型时,需要注意该对象实际所属的类型,否则可能会导致 ClassCastException 异常的发生

向下转型时需要加小括号 (目标类型)

在测试类中添加:

//向下转型 需要加小括号 (目标类型)
Cat cat = (Cat) animal;Tom tom = (Tom) flayable;
tom.beatDog();

将强制类型转换添加至"XXX"(自动生成在这里插入图片描述


http://www.ppmy.cn/news/327711.html

相关文章

【Mircosft Edge】插件推荐

插件推荐 1.推荐插件1.1 油猴 tempermonkey1.2 免费音乐播放器 Listen 1 2.添加插件2.1 打开“Micrsoft Edge 外接程序”2.2 获取新的扩展2.3 搜索插件2.3.1 在Micrsoft Edge 外接程序搜索框中输入tampermonkey,然后点击获取按钮进行安装2.3.2 在Micrsoft Edge 外接…

MongoDB 运行报 code: 31249, MongoError: Path collision at...

MongoDB 版本由 4.2 升级至 5.0,某处查询语句执行后报: MongoError: Path collision at activity_detail.period.start_date remaining portion period.start_date at MessageStream.messageHandler (/usr/src/app/node_modules/mongodb/lib/cmap/connec…

【Flutter 布局】001-Flex 布局

【Flutter 布局】001-Flex 布局 文章目录 【Flutter 布局】001-Flex 布局一、Flex1、概述简介构造函数 2、基本使用代码示例运行结果 3、方向取值范围代码示例 4、水平方向:主轴对齐方式取值范围代码示例运行结果 5、垂直方向:主轴对齐方式代码示例运行结…

参数估计和假设检验的区别与联系

1.参数估计和假设检验的区别与联系 笔记来源: 参数估计与假设检验 参数估计和假设检验有什么区别? 1.1 联系 参数估计和假设检验是推断统计的两个组成部分,它们都是根据样本信息对总体的数量特征进行推断 下图来自《统计学图鉴》 参数估计…

前端:鼠标悬停小手样式

style"cursor:pointer;" //鼠标悬停出现小手 参数: auto :标准光标 default :标准箭头 pointer, hand :手形光标 wait :等待光标 text :I形光标 vertical-text :水平I形光标 no-drop &…

IDEA设置鼠标滚轮控制缩放大小

简介:本文是idea的使用小技巧,通过ctrl鼠标滚轮,来控制缩放大小。 第一步:打开Settings 第二步:勾选 Change font… 第三步:点击apply 第四步:ctrl鼠标滚轮缩放大小