首页 > 其他分享 >包装类----实现万物皆对象

包装类----实现万物皆对象

时间:2024-08-27 22:52:24浏览次数:7  
标签:a1 包装 数据类型 System ---- println Integer 万物 out

 包装类的产生

java是由基本数据类型的,但是基本数据类型和java有一个冲突,java曾说过万物皆对象,但是int,float,char这些基本数据类型并不是对象,因此java决定不用基本数据类型,而是使用包装类

所以java对于每一个数据类型都设计了一个包装类

基本数据类型对应的包装类

包装类有什么用?

包装类的本质是一个类

public class Test {
    public static void main(String[] args) {
        int a=12;//int是基本数据类型,它只能定义数据在内存当中如何存储
        Integer a1=12;//是一个类,其中有很多方法可以使用,a1可以使用equals方法,而a只能使用==做判断
    }
}

 int a=12; 

 int是基本数据类型,它只能定义数据在内存当中如何存储
 Integer a1=12; 

Integer是一个类,其中有很多方法可以使用,a1可以使用equals方法,而a只能使用==做判断

128陷阱(面试经典题)

public class Test {
    public static void main(String[] args) {
        Integer a=12;
        Integer a1=12;//是引用数据类型,是一个类,其中有很多方法可以使用
        System.out.println(a==a1);//true
        //==比较的是地址
        Integer a2=1000;
        Integer a3=1000;//是引用数据类型,是一个类,其中有很多方法可以使用
        System.out.println(a2==a3);//false
    }
}

执行结果

分析程序执行:

定义的参数Integer a=10,通过编译和反编译,我们会发现在编译过程当中,会将Integer a=10编译为Integer.valueOf(10)

Integer.valueOf方法如下

我们发现当定义的数据不在一个区间范围之内时,会返回一个值,超出区间范围,则会开辟一个新的内存空间(这会导致地址值不同)

通过查看源代码,我们可以发现区间值为[-128,127]

区间为一个长度为256(-128~127)的区间,256个数字最终存储cache数组当中

如果超出区间范围,则会新开辟一块内存空间

执行结果

128陷阱产生的原因

在Integer的valueOf()方法当中,我们将数值在-128~127之间的数值都存储在一个cache数组当中,该数组相当于一个缓存,数据-128~127之间直接返回该数据在数组当中的地址值,所以在-128~127之间的数值用==进行比较是相等的    true

而不在这个区间的数,需要新开辟一个内存空间,所以不相等。false

自动拆装箱(经典问题)

 public class Test {
    ///自动拆装箱
        public static void main(String[] args) {
//            Integer a=10;// Integer a = Integer.valueOf(10);自动装箱
//            int b=a;//int a = b.intValue();自动拆箱
              int a=10;
              int b=10;
              Integer a1=10;
              Integer b1=10;
              Integer a2=new Integer(10);
              Integer b2=new Integer(10);
            System.out.println("1.**********");
            System.out.println(a==b);//基本数据类型,比较值是否相等
            System.out.println("2.**********");
            System.out.println(a1==b1);//引用数据类型,比较地址值是否相同,指向数组中的相同数据
            System.out.println("3.**********");
            System.out.println(a2==b2);//新开辟内存空间,地址值不同
            System.out.println("4.**********");
            System.out.println(a1==a);//包装类和基本数据类型通过==进行比较,包装类会自动拆箱,比较直是否相同
            System.out.println("5.**********");
            System.out.println(a1.equals(a));//包装类和基本数据类型通过equals进行比较会自动拆箱
            System.out.println("6.**********");
            System.out.println(a1==a2);//地址值不同
            System.out.println("7.**********");
            System.out.println(a==a2);//自动拆箱
        }
    }
    //

1.**********

true a b都是基本数据类型,==比较值是否相等

2.**********

true a1 b1都是引用数据类型,==比较地址值是否相同,指向数组中的相同数据

3.**********

false a2 b2创建时都新开辟内存空间,地址值不同

4.**********

true 包装类和基本数据类型通过==进行比较时,a1会自动拆箱

5.**********

true 包装类和基本数据类型通过equals进行比较时,a1会自动拆箱

6.**********

false 地址值不同

7.**********

true 包装类和基本数据类型通过==进行比较时,a2会自动拆箱

标签:a1,包装,数据类型,System,----,println,Integer,万物,out
From: https://blog.csdn.net/2301_81453175/article/details/141614211

相关文章

  • 资料分析笔记
    一、统计术语基期:作为对比参照的时期现期:相对于基期的称为现期描述具体数值时称之为基期量和现期量增长量vs增长率增长量:现期量和基期量增长(或减少)的绝对值增长量是具体值,有单位增长量=现期量-基期量增长量有正负,负值代表减少量增长率:增长量和基期量的相对......
  • SSH弱口令爆破服务器
    一、实验背景1、概述使用kali的hydra进行ssh弱口令爆破,获得服务器的用户名和口令,通过ssh远程登录服务器。2、实验环境kali攻击机:192.168.1.107centos服务器:192.168.1.105二、前置知识1、centos设置用户并设置弱口令centos查看用户名cat/etc/passwdcentos查看密码ca......
  • 记忆的力量:使用Langchain为AI助手添加持久记忆
    在使用Langchain构建智能对话系统时,记忆库的作用不可小觑。记忆库能够存储和管理对话历史,让AI在交流中更加连贯和个性化。通过Langchain的记忆库集成,我们可以轻松地将Redis等数据库作为后端存储,实现聊天消息的持久化。这样,无论用户何时返回,AI都能够回忆起之前的对话内容,提供更......
  • 异步任务的艺术:Bull应用详解
    Bull是一个强大的Node.js库,它基于Redis构建,为异步任务队列提供了简单而强大的解决方案。它支持多种任务处理模式,包括延迟任务、重复任务和优先级队列,使得发送电子邮件、生成报告或处理图像等耗时操作变得轻而易举。Bull的易用性、灵活性和稳定性使其成为现代应用程序中......
  • 构建高效NLP管道:PydanticOutputParser与Langchain的结合
    PydanticOutputParser是一个用于解析语言模型输出的实用工具,它允许用户指定一个Pydantic模型,并查询语言模型以生成符合该模型的JSON输出。这个工具特别有用,因为它可以帮助开发者确保从语言模型获得的结构化数据符合预期的格式,从而简化了数据处理和集成的过程。使用Pyda......
  • 如何创建滑动式开关
    文章目录1.概念介绍2.使用方法3.代码与效果3.1示例代码3.2运行效果4.内容总结我们在上一章回中介绍了"如何创建垂直方向的Switch"相关的内容,本章回中将介绍SlideSwitch组件.闲话休提,让我们一起TalkFlutter吧。1.概念介绍我们在上一章回中提到过SlideSwi......
  • Astar2024 游寄
    初赛打得第\(3\)场。link。省流:\(6\)题,rk35,没过F,输麻了。过题顺序是A->D->B->C->E->G->(F)。F没调完。简要sol:A:过题时间:00:09:08,无罚时。难度:大概1500?二分答案一下,然后没了。复杂度\(\Theta(n\log{v})\)。B:过题时间:00:25:28,一发罚时。罚时原因:数组开小......
  • D-二分
    最近做了一个CFround166的d题然后发现我并不会二分(虽然标答并不是二分)。故来写一下。题目:https://codeforces.com/contest/1976/problem/D首先观察到几个显而易见的性质:1.若要翻转[l,r],[l,r]中的(和)数量相等2.为了能和前面匹配上,翻转后[l,r]中未匹配右括号的(最大)数量要等于......
  • python读取串口 数据
    读取10s数据,然后关闭串口#读取10s串口数据后关闭这个串口importtimedefread_serial(port,baudrate,duration):try:#初始化串口ser=serial.Serial(port,baudrate)print(f"Openedserialport{port}at{baudrate}baud.")......
  • 线性回归-代码库
    importtorchimportosimportnumpyasnpimportrandomdefsynthetic_data(w,b,num_examples):'''产生data'''features=torch.normal(0,1,(num_examples,len(w)))labels=torch.matmul(features,w)+b......