Java的包装类(装箱和拆箱面试题)

news2024/11/27 13:33:56

1.为什么要有包装类(或封装类)

为了使基本数据类型的变量具有类的特征,引入包装类。

2.基本数据类型与对应的包装类:

在这里插入图片描述

3.装箱和拆箱

基本数据类型包装成 包装类的实例—装箱

通过包装类的构造器实现:
int i= 500; Integer t = new Integer(i);

还可以通过字符串参数构造包装类对象:
    Float f = new Float(4.56);
    Long l = new Long(“asdf”); //NumberFormatException 报错 不是一个类型

获得包装类对象中 包装的基本类型变量—拆箱

调用包装类的.xxxValue()方法:
    boolean b = Boolean.booleanValue();

JDK1.5之后,支持自动装箱自动拆箱。但类型必须匹配


	public void test3(){
		
		//自动装箱:基本数据类型 --->包装类
		int num2 = 10;
		Integer in1 = num2;//自动装箱
		
		boolean b1 = true;
		Boolean b2 = b1;//自动装箱
		
		//自动拆箱:包装类--->基本数据类型
		System.out.println(in1.toString());
		int num3 = in1;//自动拆箱
		
	}

字符串转换成 基本数据类型

通过包装类的构造器实现:
    int i= new Integer(12);
通过包装类的parseXxx(String s)静态方法:
    Float f = Float.parseFloat(12.1);

包装类在实际开发中用的最多的在于字符串变为基本数据类型。
    String str1 = "30" ;
    String str2 = "30.3" ;
    int x = Integer.parseInt(str1) ;// 将字符串变为int型
	float f = Float.parseFloat(str2) ; // 将字符串变为int型

基本数据类型转换成字符串

调用字符串重载的valueOf()方法:

String fstr= String.valueOf(2.34f);

更直接的方式:String intStr = 5 + “”;

面试题:

如下两个题目输出结果相同吗?各是什么

Object o1 = true ? new Integer(1) : new Double(2.0);
System.out.println(o1);//1.0    因为 要使得上述三目运算编译通过 冒号前后的类型要一致,
所以会对int自动类型提升为double --->1.0 
(三目运算符中IntegerDouble先转为intdouble的基本数据类型去做比较)Java 中,当条件表达式的两个分支类型不一致时,会进行类型转换以满足统一的类型要求在这种情况下,会发生数值类型的自动提升。
根据 Java 的数值类型转换规则,Integer 类型可以自动转换为更宽容的数值类型,例如 double。
而 Double 类型本身就是 double 类型的包装类,因此无需进行类型转换。

在这个条件表达式中,由于 new Integer(1)Integer 类型,而 new Double(2.0)Double 类型,
Java 在进行类型转换时会选择更宽容的类型,将整数类型的 1 自动转换为浮点数类型的 1.0。因此,最终的输出结果为 1.0。

如果希望输出结果为整数 1,可以将条件表达式中的 new Double(2.0) 改为整数类型的 2,
即 true ? new Integer(1) : 2。这样,整数类型的 1 将会被赋值给 o1,输出结果就是 1public void test3() {
		Integer i = new Integer(1);
		Integer j = new Integer(1);
		System.out.println(i == j);//false 比较地址(new一次生成一个地址)
		
		//Integer内部定义了IntegerCache结构,IntegerCache中定义了Integer[],
		//保存了从-128~127范围的整数。如果我们使用自动装箱的方式,给Integer赋值的范围在
		//-128~127范围内时,可以直接使用数组中的元素,不用再去new了。目的:提高效率
		
		Integer m = 1;
		Integer n = 1;
		System.out.println(m == n);//true 没有new新地址 用的是缓存中的1

		Integer x = 128;//相当于new了一个Integer对象  因为缓存没有128
		Integer y = 128;//相当于又new了一个Integer对象
		System.out.println(x == y);//false
	}

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

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

相关文章

案例34:基于Springboot在线互动学习网站开题报告设计

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

深度学习笔记之Seq2Seq(一)基本介绍

深度学习笔记之Seq2seq——基本介绍 引言回顾:经典循环神经网络结构关于循环神经网络的更多引用 Seq2seq \text{Seq2seq} Seq2seq网络结构 Seq2seq \text{Seq2seq} Seq2seq结构描述 引言 从本节开始,将介绍 Seq2seq \text{Seq2seq} Seq2seq。 回顾&…

苏轼人生历程不同时期作品

大文豪苏轼才华横溢,一生却屡经贬谪,四处漂泊。但好在他生性豁达,为人率真,又深得道家思想精髓,所以他不仅没有为不幸的遭遇所折服,反而活出了别样的潇洒与风采。也正因如此,他的诗词、他的性情…

人脸融合相关调研

以前的记录,整理发现了值得分享一下。 云解决方案 腾讯: https://ai.qq.com/product/facemerge.shtmlFace: https://www.faceplusplus.com.cn/face-merging/Baidu:https://ai.baidu.com/tech/face/merge 自研 纯Opencv实现,基于…

由世纪互联运营的Microsoft Teams携创新功能正式发布,助力合作伙伴生态共赢

2023年4月18日,北京——由世纪互联运营的Microsoft Teams推出一系列创新功能,围绕企业数字核心能力,赋能数字化协作空间、智能化协作体验、整合生产力工具和工作流、安全合规、构建团队文化等五大落地场景,这将进一步帮助中国市场…

【unity造轮子】最简单的双向可穿越平台制作(Platform Effector 2D的使用)

文章目录 先看最终效果2D平台效应器(Platform Effector 2D)1. 这里简单解释一下2.一些常见的效果包括:3.Platform Effector 2D具有各种属性,使我们可以控制它的行为。这些属性包括: 可向上穿越的平台向下穿越的平台最终…

代码随想录算法训练营第一天| 704.二分查找、27.移除元素

LeetCode704.二分查找 链接:(704.二分查找) 题目描述:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 题目就…

远程服务调用的简单应用,并轻松解决LinkedHashMap无法转成相关实体类的问题

🏀(一)为啥需要远程服务调用? 🐠知其然还要知其所以然,在我们的生产项目上一般而言会部署多个微服务,每个微服务会负责不同版块的业务工作。如果某个微服务需要借助另外的某些微服务中的接口才能…

尚硅谷甄选

搭建后台管理系统模板 项目初始化 今天来带大家从0开始搭建一个vue3版本的后台管理系统。一个项目要有统一的规范,需要使用eslintstylelintprettier来对我们的代码质量做检测和修复,需要使用husky来做commit拦截,需要使用commitlint来统一提…

tb6612电机驱动与JGB37-520减速直流电机

tb6612电机驱动与JGB37-520减速直流电机 文章目录 tb6612电机驱动与JGB37-520减速直流电机电机驱动模块TB6612TB6612的引脚说明真值表(直流电机的驱动状态)TB6612的正转反转原理 直流电机原理减速器编码器一、关于编码器的介绍二、编码器的工作原理&…

Linux:DHCP服务

我的DHCP服务器 是 centos7 使用的yum安装DHCP服务(如果不会搭建yum库可以查看) Linux:rpm查询安装 && yum安装_鲍海超-GNUBHCkalitarro的博客-CSDN博客 我的环境为: 两台centos7一台win10 第一台centos7 为 DHCP服务器…

【Python 私有变量和私有方法】零基础也能轻松掌握的学习路线与参考资料

Python是一种面向对象的编程语言。在Python类中,私有变量和私有方法是常见的概念。私有变量和私有方法是指只能在类内部访问的变量和方法。在本文中,我们将介绍Python私有变量和私有方法的学习路线,并给出参考资料和优秀实践。 学习Python面…

【MySQL数据库 | 第七篇】图形化界面工具DataGrip基础应用教学

目录 前言: DataGrip安装界面: 利用DataGrip创建数据库: 利用DataGrip为数据库创建表: 利用datagrip修改表: 添加元素: 结束! 前言: 在之前我们一直接触的是MySQL命令行语句开…

macOS Sonoma 14beta With OpenCore 0.9.3 and winPE双引导分区黑苹果原版镜像

镜像特点(原文地址:http://www.imacosx.cn/113888.html) 完全由黑果魏叔官方制作,针对各种机型进行默认配置,让黑苹果安装不再困难。系统镜像设置为双引导分区,全面去除clover引导分区(如有需要…

RL - 强化学习 马尔可夫决策过程 (MDP) 转换 马尔可夫奖励过程 (MRP)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/131097165 马尔可夫决策过程(Markov Decision Process,MDP)和马尔可夫奖励过程(Markov R…

FluxMQ 规则引擎 《一》

规则引擎介绍 演示环境 http://demo.fluxmq.com:50000/ 账号:fluxmq密码:fluxmq 简介 FluxMQ Rule Engine (以下简称规则引擎) 用于配置FluxMQ 消息流与设备事件的处理、响应规则。规则引擎不仅提供了清晰、灵活的 “配置式” 的业务集成方案&#xff0…

(二)CSharp-关于内存分配的总结和疑惑(未解决)

同时看了好几本书,对变量的内存分配概念总是稀里糊涂的。所以干脆专门写一篇文章来对C#内存分配进行研究和总结。 1、值类型和引用类型 对值类型: 值类型实例通常存在线程的堆栈里。即所有值类型的非成员数据都放在线程的堆栈里。如果值类型是类的数据…

4.使用Express跨域资源共享(继上一章)

4.5、CORS跨域资源共享 1.接口的跨域问题 刚才编写的GET和POST接口,存在一个很严重的问题:不支持跨域请求。 解决接口跨域问题的方案主要有两种: ①CORS(主流的解决方案,推荐使用) ②JSONP&#xff08…

Windows软件架构概念

我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来聊聊Windows软件架构的概念。 Shaw和Garlan在他们划时代的著作中以如下方式讨论了软件的体系结构:从第一个程序被划分成模块开始,软件系统就有了体系结构。现在&#xff0c…

PostgreSQL部署出现只有超级用户能创建扩展

最近在Windows Server服务器上部署PostgreSQL12遇到了一个问题,部署完成时,任务问题都没有,也可以远程连接。但是在给数据库添加扩展时出现了如下所述的问题: 执行sql命令create extension "uuid-ossp"出现问题如下:create extension “uuid-ossp” 错误: 创建扩…