首页 > 其他分享 >包装类

包装类

时间:2024-03-21 14:48:12浏览次数:16  
标签:4.2 包装 数据类型 int static Integer 装箱

4.包装类

4.1介绍

基本数据类型, 包装成 (变成引用数据类型)

作用:变成类, 就可以创建对象了,对象就可以调用方法方便的解决问题了

4.2基础类型对应的包装类

4.2.1分类

基本数据类型引用数据类型
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
boolean Boolean

4.2.2如何进行包装(用Integer举例)

public Integer(int value)
public static Integer valueOf(int i)

4.2.2.1手动装箱

在 jdk5 以前,将基本数据类型转换为包装类需要我们手动。这里以基本数据类型 int 转换包装类 Integer 为例。

int n1 = 100;

//手动装箱 int -> Integer
Integer integer = new Integer(n1);
//或者 Integer integer = Integer.valueOf(n1);

4.2.2.2自动装箱(JDK5)

在 jdk5 及以后,实现了自动装箱工作。

int n2 = 200;
//自动装箱
Integer integer2 = n2;//底层使用的是 Integer.valueOf(n2)

原理:在将一个基本数据类型的值赋给其对应的包装类对象时,java会自动调用其中的valueof方法,该方法接收这个基本数据类型的值,然后创建一个该包装类的对象并将这个值存进去,然后返回该对象

4.2.2.3手动拆箱

在 jdk5 以前,将包装类转换为基本数据类型需要我们手动。这里以基本数据类型 Integer转换包装类 int 为例。

//这里的integer是一个Integer对象
int a = integer.intValue();

4.2.2.4自动拆箱(JDK5)

在 jdk5 及以后,实现了自动拆箱工作。

//自动拆箱
int n3 = integer2;//底层使用的是 intValue()方法

自动拆箱:在将一个基本数据类型的值和其对应的包装类对象进行运算时,java会自动调用xxxValue方法,将该对象转化成对应基本数据类型的值

4.2.2.5结论

我们现在使用不需要在手动装箱和拆箱,直接使用就可以

基本数据类型, 和对应的包装类是可以直接在一起运算的。

4.2.3包装类面试题

public static void main(String[] args) {
   Integer i1 = 127;
   Integer i2 = 127;
   System.out.println(i1 == i2); //true

   Integer i3 = 129;
   Integer i4 = 129;
   System.out.println(i3 == i4); //false
}

自动装箱现象:

如果装箱的数据, 在byte的取值范围内 (-128~127),==号比较的结果就是true, 反之是false。

解释原因:

Integer.valueOf();


Integer[] cache = {new Integer(-128), new Integer(-127) .... new Integer(126), new Integer(127)};

public static Integer valueOf(int i) {              // 126
   if (i >= -128 && i <= 127) {
       return IntegerCache.cache[i + 128];         // 254
  }
   return new Integer(i);
}

参考:

Integer自动装箱的时候会调用valueOf方法。方法的源码中, 会进行一个判断, 判断装箱的数据是否在 -128~127之间:

在 : 会从底层的缓存中取出对象进行使用。 ​ 不在 : 会创建出一个新的对象。

底层的缓存实际上是一个Integer类型的数组, 名字叫做cache, 内部存储了 -128~127 之间所有的Integer对象。如果装箱的数据在范围中, 就会从缓存中取出已有的对象使用, 避免创建太多重复的对象。

4.2.4常用方法

4.2.4.1Integer的常用方法

方法名说明
public static String toBinaryString(int i) 得到二进制
public static String toOctalString(int i) 得到八进制
public static String toHexString(int i) 得到十六进制
public static int parseInt(String s) 将字符串类型的整数转成int类型的整数
4.2.4.1.1进制转化(了解即可)
private static void method() {
   int number = 12;
   System.out.println(Integer.toBinaryString(number));
   System.out.println(Integer.toOctalString(number));
   System.out.println(Integer.toHexString(number));
}
4.2.4.1.2parseInt
public static void main(String[] args) {
   String s = "123";
   System.out.println(Integer.parseInt(s) + 100);  // 223
}

public static int parseInt(String s); 将传入的字符串转换为数字。

字符串必须是数字字符串 "123"。

标签:4.2,包装,数据类型,int,static,Integer,装箱
From: https://www.cnblogs.com/linzel/p/18087332

相关文章

  • GB4806.8食品包装纸袋、纸杯、纸饭盒 广东检测机构 重点实验室
    什么是食品接触用纸?食品接触用纸和纸板材料及制品指的是在正常使用条件下,各种已经或预期可能与食品或食品添加剂(以下简称食品)接触,或其成分可能转移到食品中的纸和纸板材料及制品,包括涂蜡纸、硅油纸和纸浆模塑制品等。2022年7月28日,卫生健康委、市场监管总局联合发布36项食品......
  • Java 包装类:原始数据类型与迭代器
    JavaIteratorIterator接口提供了一种迭代集合的方法,即顺序访问集合中的每个元素。它支持hasNext()和next()方法,用于检查是否存在下一个元素以及获取下一个元素。获取Iterator可以使用集合的iterator()方法获取Iterator实例://导入ArrayList类和Iterator类impo......
  • 为什么要有包装类?
    1、典型回答在Java中,所有的基本类型都会对应一个包装类,如下所示:之所以要有包装类型的主要原因有以下几个:面向对象要求:Java是一门面向对象的编程语言,要求所有的数据都应该是对象。但是,基本数据类型(如int、char、double等)并不是对象,它们没有成员方法和其他面向对象的特性......
  • 包装
    包装java为了扩展每一个基本数据类型的功能,针对每一个基本数据类型都提供了一个对应的类,这些类统称为包装类byte:Byteshort:Shortint:Integer√long:Longfloat:Floatdouble:Doubleboolean:Booleanchar:Character√IntegerInteger类中的构造方法:publ......
  • (续)signal-slot:python版本的多进程通信的信号与槽机制(编程模式)的库(library) —— 强化学
    前文:signal-slot:python版本的多进程通信的信号与槽机制(编程模式)的库(library)——强化学习ppo算法库sample-factory的多进程包装器,实现类似Qt的多进程编程模式(信号与槽机制)——python3.12版本下成功通过测试......
  • JavaScript中的包装类型详解
    JavaScript中的包装类型详解在JavaScript中,我们有基本类型和对象类型两种数据类型。基本类型包括String,Number,Boolean,null,undefined和Symbol。然而,当我们需要在这些基本类型上调用方法时,就需要用到JavaScript的包装类型。什么是包装类型?包装类型是JavaScript中的......
  • 包装类、String
    包装类包装类的分类针对八种基本数据类型相应的引用类型一包装类有了类的特点,就可以调用类中的方法包装类和基本数据类型转换课堂测试下面的代码是否正确,为什么?Doubled=100d;Floatf=1.5f;Objectobj1=true?newlnteger(1):newDouble(2.0);//三元运......
  • Go 日期时间包装器:15条更便捷的时间处理
    Go日期时间包装器:15条更便捷的时间处理原创 TimLiu 爱发白日梦的后端 2024-01-1907:02 广东 听全文爱发白日梦的后端专注Go语言领域的发展,学习成为更牛逼的架构师,日常分享Go语言、架构、软件工具的使用。169篇原创内容公众号点击上方“名片......
  • Java Integer包装类缓存(cache)
    ​ Java的Integer类有一个内部的缓存机制,主要用于优化自动装箱(autoboxing)和拆箱(unboxing)的性能。这个特性首次引入于Java5,旨在减少对频繁使用的小整数值的重复对象创建,从而提高性能和减少内存使用。 参数文档:JavaInteger包装类缓存(cache)-CJavaPy1、缓存范围默认情况下,I......
  • Pdfium.Net.Free 一个免费的Pdfium的 .net包装器--添加水印
    项目地址:Pdfium.Net:https://github.com/1000374/Pdfium.NetPdfiumViewer:https://github.com/1000374/PdfiumViewer添加水印函数定义:///<summary>///AddWaterMark///</summary>///<paramname="text"></param>///<paramnam......