持续总结中!2024年面试必问 100 道 Java基础面试题(二十)

上一篇地址:持续总结中!2024年面试必问 100 道 Java基础面试题(十九)-CSDN博客

三十九、你怎么理解Java中的类型提升?

在Java中,类型提升(Type Promotion)是指在算术运算或逻辑运算中,较小的数据类型自动转换为较大的数据类型的过程。这种自动转换保证了运算结果能够存储更多的可能值,从而避免数据溢出或精度损失。

类型提升的规则

  1. 数值提升:在涉及不同数值类型的表达式中,较小的数值类型会被提升为较大的数值类型,以确保运算结果的准确性。

  2. 参与运算的数据类型:类型提升主要发生在基本数据类型之间的运算,包括整数类型和浮点数类型。

  3. 整数提升规则

    • 如果运算双方都是整数类型,较小的类型会被提升为较大的类型。例如,byteshort会被提升为int
    • 如果运算双方之一是long类型,那么另一方也会被提升为long
  4. 浮点提升规则

    • 如果运算双方都是浮点类型,较小的类型(float)会被提升为较大的类型(double)。
  5. 混合类型提升规则

    • 如果运算涉及整数和浮点类型,整数类型会被转换为浮点类型,然后按照浮点提升规则进行。

示例

public class TypePromotionExample {
    public static void main(String[] args) {
        byte b = 10;
        short s = 20;
        int result1 = b + s; // 结果为 int 类型,因为 byte 和 short 被提升为 int

        float f = 3.14f;
        double d = 2.7182;
        double result2 = f * d; // 结果为 double 类型,因为 float 被提升为 double

        long l = 123456789L;
        int i = 10;
        long result3 = l * i; // 结果为 long 类型,因为 int 被提升为 long
    }
}

在这个示例中,byteshort类型的变量相加,结果被提升为int类型。floatdouble类型的变量相乘,结果被提升为double类型。intlong类型的变量相乘,结果被提升为long类型。

注意事项

  1. 避免数据丢失:类型提升避免了在较大数据类型变量中存储较小数据类型值时的数据丢失。

  2. 精度保持:在涉及浮点数的运算中,类型提升有助于保持计算的精度。

  3. 运算符:类型提升适用于算术运算符和逻辑运算符,但不适用于关系运算符和相等运算符。

  4. 显式转换:尽管类型提升是自动的,但在必要时,程序员可以通过显式类型转换来控制变量的类型。

  5. 表达式规则:在表达式中,所有变量的类型最终会被提升为兼容的较大类型,以确保表达式的正确执行。

总结来说,类型提升是Java中确保算术运算和逻辑运算正确性和结果准确性的一种机制。它允许较小的数据类型自动转换为较大的数据类型,从而避免了数据溢出和精度损失的问题。理解类型提升的规则对于编写正确的数值运算代码非常重要。

四十、switch是否能用在long上?

在Java中,switch语句是一种流程控制结构,它允许根据一个变量的值执行不同的代码块。switch语句的表达式基于整数类型的值来决定执行哪个case标签。

switch 与 long 类型

对于是否可以在switch语句中使用long类型,答案是不能直接使用。Java的switch语句只支持以下类型作为表达式:

  • byte
  • short
  • char
  • int (以及int的任何包装类,如Integer)

尽管long是一个基本数据类型,但它不是switch语句的直接支持类型。这是因为在Java早期的设计决策中,switch语句被限制为只能处理int及其较小的整数类型。

示例代码

public class SwitchExample {
    public static void main(String[] args) {
        long longValue = 10L;

        // 这里不能直接使用long类型的longValue
        // switch (longValue) { ... }

        // 需要将long转换为int
        int intValue = (int) longValue;
        switch (intValue) {
            case 1:
                System.out.println("One");
                break;
            case 10:
                System.out.println("Ten");
                break;
            default:
                System.out.println("Other");
                break;
        }
    }
}

注意事项

  1. 数据丢失:将long转换为int可能会导致数据丢失,因为int无法表示所有long类型的值。在上述示例中,由于longValue的值在int的范围内,所以转换是安全的。

  2. 溢出:在进行longint的转换时,如果long值超出了int的最大值(2^31 - 1),则会溢出,结果可能会是不可预测的。

  3. 转换的必要性:如果确实需要在switch语句中处理long类型的值,必须先将long转换为int,并且要确保转换是安全的,即源long值在目标int类型的范围内。

  4. 替代方案:如果switch不能满足需求,可以使用if-else语句或者查找表等替代方案来实现类似的功能。

总结来说,Java的switch语句不能直接使用long类型。如果需要根据long类型的值执行不同的操作,必须先将long值转换为int类型的值,并且要确保这种转换不会导致数据溢出。在实际编程中,应当注意类型转换的安全性和准确性。

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

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

相关文章

【JavaWeb】Day62.SpringBootWeb案例——基础登录功能

登录功能 需求 在登录界面中,我们可以输入用户的用户名以及密码,然后点击 "登录" 按钮就要请求服务器,服务端判断用户输入的用户名或者密码是否正确。如果正确,则返回成功结果,前端跳转至系统首页面。 接…

Python数据分析系列(一):python入门

文章目录 前言一、Python运行方式二、Python集成开发环境(IDE)三、Python开发平台—Anaconda1、下载2、安装3、使用3.1 Anaconda应用介绍3.2 配置Python库3.3 集成开发环境使用3.3.1.Spyder3.3.2 Jupyter Notebook四、Python入门概念1、入门函数:print()与input()2、python书写…

SAP PP学习笔记08 - 作业区(工作中心Work Center),作业区Customize

上一章讲了作业手顺(工艺路线Routing)。 SAP PP学习笔记07 - 作业手顺(工艺路线Routing)-CSDN博客 这一章来讲讲作业区(工作中心 Work Center)。 1,作业区(工作中心)中…

挑战一周完成Vue3项目Day3: 品牌管理+平台属性管理+SPU管理+SKU管理

一、真实接口替换mock接口 (1)替换各个环境下的服务器地址( .env.development、.env.production、.env.test ) VITE_SERVE"http://sph-api.atguigu.cn" (2) 配饰代理跨域:vite.con…

如何测试响应式网站

我们每天通过多种设备访问互联网。移动电话,台式机/笔记本电脑,平板电脑,平板电脑…我们所掌握的设备数量已经增长为天文数字。作为消费者,体验很棒。我们可以随时随地在任何设备上自由访问互联网。但对于Web开发人员,…

磁盘格式化文件恢复:一文看懂数据恢复操作

当你意识到关键的硬盘已经被格式化,而且你不能获取里面的内容时,这会是非常令人沮丧的。这种情况可能是因为硬盘被不小心格式化,或者是你在试图修正一些问题、调整文件系统或者释放存储空间时,有意进行的格式化。无论具体情况是什…

Go 语言变量

变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。 变量可以通过变量名访问。 Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。 声明变量的一般形式是使用 var 关键字: var identifier type 可以一次声…

线程基础知识

进程是资源分配的最小单位,线程是程序执行的最小单位… 为什么使用线程 多线程之间会共享同一块地址空间和所有可用数据的能力,这是进程所不具备的线程要比进程更轻量级 ,由于线程更轻,所以它比进程(fork创建进程以执行新的任务…

Postgresql 从小白到高手 十一 :数据迁移ETL方案

文章目录 Postgresql 数据迁移ETL方案1、Pg 同类型数据库2 、Pg 和 不同数据库 Postgresql 数据迁移ETL方案 1、Pg 同类型数据库 备份 : pg_dump -U username -d dbname -f backup.sql插入数据: psql -U username -d dbname -f backup.sqlpg_restore -U username…

远程桌面连接服务器怎样连接不上的六个常见原因

远程桌面连接服务器无法连接的问题可能由多种原因引起。以下是一些常见的问题及其解决方案: 1. 网络连接问题:远程桌面连接的基础是稳定的网络连接。如果网络连接不稳定或中断,那么你将无法连接到远程桌面。检查你的网络连接,确保…

Codigger数据篇(中):数据可控性的灵活配置

在数据服务领域中,数据可控性无疑是至关重要的一环。数据可控性不仅关乎数据的安全性和隐私性,更直接影响到数据价值的实现。Codigger,在其数据可控性方面的灵活配置,为用户提供了更加便捷、高效的数据管理体验。 一、自主选择数…

Spring6 当中 Bean 的生命周期的详细解析:有五步,有七步,有十步

1. Spring6 当中 Bean 的生命周期的详细解析:有五步,有七步,有十步 文章目录 1. Spring6 当中 Bean 的生命周期的详细解析:有五步,有七步,有十步每博一文案1.1 什么是 Bean 的生命周期1.2 Bean 的生命周期 …

ThinkPHP Lang多语言本地文件包含漏洞(QVD-2022-46174)漏洞复现

1 漏洞描述 ThinkPHP是一个在中国使用较多的PHP框架。在其6.0.13版本及以前,存在一处本地文件包含漏洞。当ThinkPHP开启了多语言功能时,攻击者可以通过lang参数和目录穿越实现文件包含,当存在其他扩展模块如 pear 扩展时,攻击者可…

esp32学习

开启自动补全功能 Arduino IDE 2.0开启代码补全及修改中文_arduino ide怎么设置中文-CSDN博客 PWM 、 ADC转换 在使用这个adc默认配置的时候adc引脚的输入电压必须是介于0-1之间,如何高于1v的电压都会视为一个最高值,如果要增加测量电压你就需要配置一…

【JAVA】part5-Java集合

Java 集合 Java集合概述 Java数组的局限性 数组初始化后大小不可变;数组只能按索引顺序存取。 Java的java.util包主要提供了以下三种类型的集合: List:一种有序列表的集合,例如,按索引排列的Student的List&#xff1b…

车载气象站:可移动监测的气象站

TH-CZ5车载气象站是一种专门针对车辆、船舶等应急环境检测设备而设计的可移动监测的气象站。 一、系统介绍 车载气象站系统采用先进的高精度GPS及三轴电子罗盘,可实现车行驶时的风速、风向检测。整机为野外型设计,同时还可对气温、相对湿度、雨量、气压…

Linux修改文件权限命令 chmod

【例子引入】 以下面命令为例: chmod 777 Random.py 当写入下面名为Random.py的代码后: 如果直接运行,会显示权限不够 当输入 chmod 777 Random.py 更改权限后,才能够正常运行 在终端中输入 这条命令是关于Linux或Unix-like系…

FlaUI

FlaUI是一个基于微软UIAutomation技术(简称UIA)的.NET库,它主要用于对Windows应用程序(如Win32、WinForms、WPF、Store Apps等)进行自动化UI测试。FlaUI的前身是TestStack.White,由Roemer开发,旨…

Socket编程--TCP连接以及并发处理

流程图 网络传输流程: TCP连接: api 客户端: socket: 创建套接字 domain: AF_INET :IPv4 type: SOCK_STREAM(tcp)、SOCK_DGRAM(udp) protocol: 0 默认协议 返回值:成功返回一个新的套接字…

Linux-进程间通信(进程间通信介绍、匿名管道原理及代码使用、命名管道原理及代码使用)

一、进程通信介绍 1.1进程间通信的目的 数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某…
最新文章