Java 数据类型转换

Java 语言支持两种数据类型:基本数据类型和引用数据类型。

1. 基本数据类型

基本数据类型是直接存储在内存中的数据类型,包括:

  • 整数类型:byte、short、int、long
  • 浮点数类型:float、double
  • 字符类型:char
  • 布尔类型:boolean

基本数据类型的大小和范围是固定的,并且是不可变的,这意味着它们的值一旦被创建就无法改变。

2. 引用数据类型

引用数据类型是存储在堆内存中的数据类型,包括:

  • 数组
  • 接口

引用数据类型的大小和范围是动态的,并且是可变的,这意味着它们的值可以被改变。引用数据类型实际上存储的是指向堆内存中对象的指针,而不是对象本身。

3. 基本数据类型转换

基本数据类型转换是指将一种基本数据类型的值转换为另一种基本数据类型的值。

基本数据类型转换可以分为隐式转换和显式转换两种:

  • 隐式转换: 隐式转换是指 Java 编译器自动进行的类型转换。例如,将 int 类型的变量的值赋值给 double 类型的变量,Java 编译器会自动将 int 类型的变量的值转换为 double 类型。
  • 显式转换: 显式转换是指程序员手动进行的类型转换。例如,将 double 类型的变量的值转换为 int 类型的变量,需要进行显式转换。显式转换需要使用强制类型转换运算符 ((type)) 进行。

4. 引用数据类型转换

引用数据类型转换是指将一种引用数据类型的值转换为另一种引用数据类型的值。

引用数据类型转换可以分为向上转型和向下转型两种:

  • 向上转型: 向上转型是指将子类对象转换为父类对象。例如,将 Dog 对象转换为 Animal 对象。向上转型是安全的,因为子类对象可以被视为父类对象。
  • 向下转型: 向下转型是指将父类对象转换为子类对象。例如,将 Animal 对象转换为 Dog 对象。向下转型是不安全的,因为父类对象可能不是子类对象。进行向下转型时,需要进行类型检查,以确保父类对象是子类对象。如果不兼容,则会抛出 ClassCastException 异常。

5. 混合类型转换

混合类型转换是指将一种数据类型的值转换为另一种数据类型的值,其中一种数据类型是基本数据类型,另一种数据类型是引用数据类型。

在将基本数据类型转换为引用数据类型时,需要使用对应的包装类。例如,将 int 类型的变量转换为 String 对象,可以使用 Integer 类的 toString() 方法。混合类型转换需要进行显式转换。

需要注意的是,混合类型转换可能会导致数据类型不匹配的问题。在进行混合类型转换时,需要确保被转换的值符合目标数据类型的要求,否则可能会抛出异常或得到错误的结果。

6. 类型转换规则

Java 数据类型转换遵循以下规则:

  • 隐式转换:
    • byte、short、char 可以隐式转换为 int。
    • int 可以隐式转换为 long、float、double。
    • float 可以隐式转换为 double。
    • 引用数据类型可以向上转型为其父类或接口类型,属于隐式转换。
  • 显式转换:
    • 任何基本数据类型都可以显式转换为任何其他基本数据类型。
    • 引用数据类型可以向下转型为其子类类型,但需要进行类型检查和强制转换操作。

以下是一些类型转换的示例:

// 隐式转换
int i = 10;
double d = i; // i 的值会自动转换为 double 类型

// 显式转换
double d = 3.14;
int i = (int) d; // d 的值会强制转换为 int 类型,可能会导致精度损失

// 向上转型
Dog dog = new Dog();
Animal animal = dog; // dog 对象可以被视为 Animal 对象

// 向下转型
Animal animal = new Dog();
Dog dog = (Dog) animal; // animal 对象需要进行类型检查,以确保它是 Dog 对象

// 基本数据类型转换为引用数据类型
int num = 10;
String str = Integer.toString(num); // 将 int 类型的变量 num 转换为 String 对象

// 引用数据类型转换为基本数据类型
String str = "10";
int num = Integer.parseInt(str); // 将 String 对象 str 转换为 int 类型的变量

7. 类型转换的注意事项

类型转换需要注意以下几点:

  • 显式转换需要进行类型检查,以确保转换后的值与目标类型兼容。
  • 向上转型是安全的,因为子类对象可以被视为父类对象。
  • 向下转型是不安全的,因为父类对象可能不是子类对象。进行向下转型时,需要进行类型检查,以确保父类对象是子类对象。
  • 隐式转换不会导致精度损失。 隐式转换是指编译器自动执行的类型转换,它不会改变数据的原始值。例如,将一个整型值转换为浮点型值时,编译器会将整型值扩展为浮点型值,而不会丢失任何信息。
  • 精度损失通常发生在显式转换中,当目标类型无法表示源类型的值时。例如,将一个浮点型值转换为整型值时,编译器会截断小数部分,这可能会导致精度损失。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/573237.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

绿联搭建rustdesk服务器

绿联搭建rustdesk服务器,不再使用向日葵 注意:本服务器需要有动态公网IP以及自己的域名,ipv6未测试。 1. 拉取镜像 rustdesk/rustdesk-server-s6:latest 注意是这个-s6的镜像。 2. 部署镜像 2.1 内存配置 本服务器比较省内存&#xff0…

区块链安全应用-------压力测试

基于已有的链进行测试(build_chain默认建的链 四个节 点): 第一步:搭链 1. 安装依赖 在ubuntu操作系统中,操作步骤如下: sudo apt install -y openssl curl 2. 创建操作目录, 下载安装脚本 ## 创建操作…

力扣数据库题库学习(4.22日)

577. 员工奖金 问题链接 思路分析 Employee表与Bonus表通过empId字段可以连接,需求是查出奖金少于1000的员工名和奖金值。 这里奖金少于1000的情况就是没有奖金有奖金但少于1000 这里我给出的解决方案就是使用左连接,将Employee表作为左表&#xff…

js的算法-交换排序(冒泡)

交换排序 所谓交换排序,是指根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。基于交换的排序算法很多,本次介绍冒泡排序和快速排序。 冒泡 基本思想 从后往前(或从前往后)两两比较相邻元素的值&#xff0…

Nginx第3篇-使用ngx_http_proxy_connect_module配置https正向代理

场景 我使用python爬虫,然后需要个代理,所以就用Nginx搭了一个代理服务器。对Nginx也不太熟,慢慢摸索,搭建完之后发现只能代理http的请求,无法穿透https。几经折腾和摸索发现一个强大的HTTP代理模块:ngx_h…

泛微OA对接北森HR系统场景解析

随着企业信息化建设的深入推进,跨系统集成已成为提升管理效率、实现数据一体化的关键举措。详细阐述其如何通过泛微OA(Office Automation)系统与北森HR(Human Resource)系统的深度对接,实现人员信息、员工请…

RIP最短路实验(思科)

华为设备参考:RIP最短路实验(华为) 一,技术简介 RIP(Routing Information Protocol,路由信息协议)是一种基于距离矢量的内部网关协议,工作原理是每个路由器周期性地向邻居路由器发…

深度解析 Spring 源码:揭秘BeanFactory 之谜

文章目录 一、认识BeanFactory1.1 BeanFactory的概述1.2 BeanFactory与 ApplicationContext的区别 二、BeanFactory源码解读2.1 BeanFactory 接口2.1.1 getBean()2.1.2 containsBean()2.1.3 isSingleton() 2.2 DefaultListableBeanFactory 类2.2.1 registerBeanDefinition()2.2…

游戏行业干货科普 | 各个诚实都有哪些游戏公司?

本文主要列举上海、北京、广州、深圳、成都、杭州等城市游戏公司名称,大家可以码住,慢慢看~ 上海 米哈游 游戏势力新一极,近十年唯一一家打破腾讯、网易二强局面的公司莉莉丝 卡牌自研头部,SLG发行头部,最懂商业化的…

创建Maven项目的时候让选择maven模板

创建Maven项目的时候让选择maven模板 心得 工欲利其事 必先利其器。如果你想要干成一件事 那么必须先要精通对应的工具使用。之前我不太注重工具 我觉得只要代码写的好就可以了 但是当我们了解了产品经理的一些思想之后,我才明白一个好的产品是可以给用户提供多大…

文件上传方式三(若伊版本)

1.准备配置类 package com.ruoyi.screen.core;public class MimeTypeUtils {public static final String IMAGE_PNG "image/png";public static final String IMAGE_JPG "image/jpg";public static final String IMAGE_JPEG "image/jpeg";pu…

Stable Diffusion中的embedding

Stable Diffusion中的embedding 嵌入,也称为文本反转,是在 Stable Diffusion 中控制图像样式的另一种方法。在这篇文章中,我们将学习什么是嵌入,在哪里可以找到它们,以及如何使用它们。 什么是嵌入embedding&#xf…

Axure设计美观友好的后台框架页

使用Axure设计后台框架页 优点介绍: **1、使用中继器灵活配置菜单项; 2、二级菜单面板跟随一级菜单位置显示; 3、菜单链接打开后,联动添加tab标签; 4、标签页与iframe内容联动,可关闭; 5、左侧…

SpringBoot集成Sharding-JDBC实现主从同步

SpringBoot集成Sharding-JDBC实现主从同步 1.mysql主从配置2.application.properties文件配置3.测试3.1 查询数据3.2 添加数据 1.mysql主从配置 详细内容请参考上一篇文章:MySQL8.0以上实现主从同步配置 2.application.properties文件配置 # ShardingSphere conf…

通过本机端口映射VMware中虚拟机应用(例如同一局域网别人想远程连接你虚拟机中的数据库)

需要 虚拟机中安装一下达梦数据库,并且以后大家都连接你虚拟机中达梦数据库进行开发。。。。。。在不改动自己虚拟机配置,以及本地网卡任何配置的情况下如何解决?本虚拟机网络一直使用的NAT模式。 解决 找到NAT设置添加端口转发即可解决。…

Git for Windows 下载与安装

当前环境:Windows 8.1 x64 1 打开网站 https://git-scm.com/ ,点击 Downloads 。 2 点击 Windows 。 3 选择合适的版本,这里选择了 32-bit Git for Windows Portable。 4 解压下载后的 PortableGit-2.44.0-32-bit.7z.exe ,并将 P…

运营商三要素核验接口-手机实名验证API

运营商三要素核验接口是一种API(Application Programming Interface,应用程序编程接口),主要用于通过互联网技术对接通信运营商的实名制数据库,以验证用户提供的手机号码、身份证号码、姓名这三项关键信息(…

乐鑫的ESP32-S3芯片的LE能实现beacon功能吗?

最近帮一个客户做ESP32定位器方案,客户提出这个疑问,乐鑫的ESP32-S3芯片的LE能实现beacon功能吗?针对这个问题,启明云端工程师小启给出这样的回复。 回答是可以的,大家可以看idf的例程。 ESP-IDF iBeacon demo From …

19 使用MapReduce编程统计超市1月商品被购买的次数

首先将1月份的订单数据上传到HDFS上&#xff0c;订单数据格式 ID Goods两个数据字段构成 将订单数据保存在order.txt中&#xff0c;&#xff08;上传前记得启动集群&#xff09;。 打开Idea创建项目 修改pom.xml&#xff0c;添加依赖 <dependencies><dependency>…

惠海 H5112B 洗墙灯24V36V48V60V72V100V1.2ALED降压恒流芯片IC PWM无频闪调光

洗墙灯24V36V48V60V72V100V1.2A LED降压恒流芯片PWM无频闪调光是一种特殊的电子元件&#xff0c;专为洗墙灯等LED照明设备设计。以下是关于这种芯片的主要特点和功能&#xff1a; 降压恒流功能&#xff1a;该芯片能够将较高的输入电压&#xff08;如24V、36V、48V等&#xff0…