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

news2024/10/5 15:29:14

文章目录

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


前言

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

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.coloradmin.cn/o/633604.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Koa学习3:用户添加、错误处理

模型 在src目录下创建model目录,用来存放模型 创建用户模型 user.model.js 注意: UUID类型是无法自增的,将id设置为UUID类型时只需要为其指定默认值即可 // 数据类型 const { DataTypes } require(sequelize); // 导入已经连接了数据库…

集合导题、刷题、考试全套完整流程,专业强大的功能,提高刷题学习效率和企业的培训效率

土著刷题微信小程序v1.15,主要是迭代了考试模块的进阶功能,对考试模块进行了一次升级改造。 由于在v1.15开发期间,收到了违规内容整改的通告,为了遵守相关法律法规,让小程序能够平稳安全地运营下去,我们特此…

我说用count(*)统计行数,面试官让我回去等消息...

前言 1 count(*)为什么性能差? 2 如何优化count(*)性能? 2.1 增加redis缓存 2.2 加二级缓存 2.3 多线程执行 2.4 减少join的表 2.5 改成ClickHouse 3 count的各种用法性能对比 前言 最近我在公司优…

Consul单机集群

一、准备工作 1、下载consul consul各版本下载地址,点击如下连接前往: Consul Versions | HashiCorp Releases 本案例使用版本:Consul v1.15.0 ;下载的文件解压皆可,consul为可执行文件。 2、创建目录&#xff1a…

移动安全app渗透测试之渗透流程、方案及测试要点讲解

被产品经理分到了个app测试的活,(话说为啥是产品经理给派活,我不是归技术总监管么),包含安卓端的和ios端的,有点懵逼,说好的web渗透测试和服务器端渗透测试呢,虽然懵逼,不…

【V4L2】v4l2框架分析之video_device

文章目录 🔺一、video_device分析(1-1)struct video_device结构(1-2)struct v4l2_ioctl_ops结构(1-3)v4l2_file_operations结构 🔺二、注册video设备🔺三、卸载清除video…

华为OD机试真题B卷 JavaScript 实现【自守数】,附详细解题思路

一、题目描述 自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25^2 625,76^2 5776,9376^2 87909376。请求出n(包括n)以内的自守数的个数。 数据范围: 1≤n≤10000 二、输入描述 int型整数。 三、输出描述 n以内…

Maven了解及使用

套用一下常用的what, why, how 对maven进行了解。 首先,what? maven是什么? 1、Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecy…

《C# 教程》菜鸟教程学习笔记

学习地址 ######C#有用的网站 C# Programming Guide - 介绍了有关关键的 C# 语言特征以及如何通过 .NET 框架访问 C# 的详细信息。Visual Studio - 下载作为 C# 集成开发环境的 Visual Studio 的最新版本。Go Mono - Mono 是一个允许开发人员简单地创建跨平台应用程序的软件平台…

I.MX6ull GPT高精度定时器

一 简介 GPT的全称是General Purpose Timer,它是一个32位的向上的定时器, GPT 定时器也可以跟一个值进行比较,当计数器值和这个值相等的话就发生比较事件,产生比较中断。GPT 定时器有一个 12 位的分频器,可以对 GPT 定…

sqli-labs靶场通关(1-10)

这次的靶场主要为sql注入的练习,在练习靶场前我们需要了解以下mysql数据库。 数据库是一个用于存储和管理数据的仓库。数据按照特定的格式存储,可以对数据库中的数据进行增加、修改、删除和查询操作。数据库的本质是一个文件系统,按照一定的…

2023年腾讯云618年中大促活动整理汇总

2023年腾讯云618年中大促活动正在进行中,目前正是腾讯云最优惠的时候,小编给大家整理汇总了腾讯云618活动时间、活动入口、活动内容,大家记得抓住上云好时机! 一、2023年腾讯云618活动时间 2023年05月25日-2023年6月30日 二、20…

【024】C++对C的扩展之命名空间namespace详解

C对C的扩展 引言一、面向对象编程概述1.1、面向过程1.2、面向对象 二、作用域运算符 :: (双冒号)三、命名空间 namespace3.1、命名空间使用语法3.2、using声明命名空间中的成员可用3.3、using声明整个命名空间可用 总结 引言 💡 作者简介&…

【浅谈DBA职业生涯之误操作篇---读书笔记】

👈【上一篇】 💖The Begin💖点点关注,收藏不迷路💖 【下一篇】👉 🔻【💣 话题引入:请列举你在从事 DBA 生涯中,最难以忘怀的一次误操作】 🚩 该话题覆盖…

【算法】深入了解数据压缩算法(无损压缩和有损压缩)

目录 1 引言: 1 数据压缩的重要性和应用场景 2 压缩算法的基本原理和分类 2. 无损压缩算法 2.1 哈夫曼编码 2.1.1 哈夫曼编码的原理和步骤 2.1.2 实现一个简单的哈夫曼编码器 2.2 字典编码 2.2.1 LZW算法的原理和步骤 2.2.2 实现一个基于LZW算法的压缩程序…

力扣笔记(每日随机一题)—— 二叉树的中序遍历

问题(简单) 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/binary-tree-inorder-traversal/ 示例 1 输入:root […

诡异BUG:DIV 的 margin 设置影响父级

参考资料&#xff1a;1、【web前端】23.解决内部div的margin影响外部div的margin_Anabel Chen的博客-CSDN博客 2、元素之间设置margin的影响及原因 有如下代码&#xff1a; <!doctype html> <html> <head><meta http-equiv"Content-Type" co…

RPC——RPC协议介绍及原理详解

common wx&#xff1a;CodingTechWork 介绍 RPC框架 概念 RPC&#xff08;Remote Procedure Call Protocol&#xff09; 远程过程调用协议。RPC是一种通过网络从远程计算机程序上请求服务&#xff0c;不需要了解底层网络技术的协议。RPC主要作用就是不同的服务间方法调用就…

Java蓝桥杯

目录 往年真题 题目分类 搜索 动态规划 并查集 贪心算法 二分查找 输入输出 图论 其他 往年真题 2022年第十三届蓝桥杯大赛软件类决赛Java研究生组真题 - 题库 - C语言网 2021年蓝桥杯第十二届省赛及国赛真题 - 题库 - C语言网 2020年蓝桥杯第十一届省赛及国赛真题…

[创业之路-73] :如何判断一个公司或团队是熵增:一盘散沙、乌合之众,还是,熵减:凝聚力强、上下一心?

前言&#xff1a; 一盘散沙、乌合之众&#xff1a; 凝聚力强、上下一心&#xff1a; 一、股权结构与利益分配 一盘散沙、乌合之众 凝聚力强、上下一心 股权结构过于松散和平均&#xff0c;无决策者&#xff0c;常常陷入无休止的争论股权结构层次结构&#xff0c;有最终决策者…