【包装类型】

article/2025/8/18 2:57:34

文章目录

  • 包装类
    • 八种基本类型及其包装类
      • 手动装箱/拆箱
      • 自动装箱/拆箱
      • 整数型常量池
  • Integer方法

包装类

我们已经知道,Java的数据类型分两种:
基本类型:byte,short,int,long,boolean,float,double,char
引用类型:所有class和interface类型
引用类型可以赋值为null,表示空,但基本类型不能赋值为null:

String s = null;
int n = null; // compile error!

如何把一个基本类型视为对象(引用类型)?包装类
定义好了包装类,我们就可以把基本类型和引用类型互相转换:

Integer n = null;
Integer n2 = new Integer(99);
int n3 = n2.intValue();

八种基本类型及其包装类

因为包装类型非常有用,Java核心库为每种基本类型都提供了对应的包装类型:

基本类型对应的引用类型
booleanjava.lang.Boolean
bytejava.lang.Byte
shortjava.lang.Short
intjava.lang.Integer
longjava.lang.Long
floatjava.lang.Float
doublejava.lang.Double
charjava.lang.Character

手动装箱/拆箱

int i = 100;// 通过new操作符创建Integer实例(不推荐使用,会有编译警告):Integer n1 = new Integer(i);// 通过静态方法valueOf(int)创建Integer实例:Integer n2 = Integer.valueOf(i);// 通过静态方法valueOf(String)创建Integer实例:Integer n3 = Integer.valueOf("100");System.out.println(n3.intValue());

自动装箱/拆箱

Java编译器可以帮助我们自动在int和Integer之间转换:

Integer n = 100; // 编译器自动使用Integer.valueOf(int)
int x = n; // 编译器自动使用Integer.intValue()

整数型常量池

public class IntegerTest05 {public static void main(String[] args) {// z是一个引用,z是一个变量,z还是保存了一个对象的内存地址。Integer z = 1000; // 等同于:Integer z = new Integer(1000);// 分析为什么这个没有报错呢?// +两边要求是基本数据类型的数字,z是包装类,不属于基本数据类型,这里会进行自动拆箱。将z转换成基本数据类型// 在java5之前你这样写肯定编译器报错。System.out.println(z + 1);//1001Integer a = 1000; // Integer a = new Integer(1000); a是个引用,保存内存地址指向对象。Integer b = 1000; // Integer b = new Integer(1000); b是个引用,保存内存地址指向对象。System.out.println(a == b); //false}
}
public class IntegerTest06 {public static void main(String[] args) {Integer a = 128;Integer b = 128;System.out.println(a == b); //false//原理:x变量中保存的对象的内存地址和y变量中保存的对象的内存地址是一样的。Integer x = 127;Integer y = 127;// == 永远判断的都是两个对象的内存地址是否相同。System.out.println(x == y); //true}
}

注意:
== 这个运算符不会触发自动拆箱机制
== 永远判断的都是两个对象的内存地址是否相同。
只有 + - * / 等运算的时候才会触发自动拆箱机制
java中为了提高程序的执行效率,将 [-128 ~ 127] 之间所有的包装对象提前创建好, 放到了一个方法区的“整数型常量池”当中了。
目的是:只要用这个区间的数据不需要再new了,直接从整数型常量池当中取出来。
在这里插入图片描述

Integer方法

注意: Byte、Short、Long、Float、Double、Boolean照葫芦画瓢,方法差不多相同。

方法名作用
static Integer decode(String nm)将String转成Integer
static int compare(int x, int y)比较两个数是否相等;相等返回0;前大后小返回1;后大前小返回-1
static int signum(int i)符号函数;负数返回-1;正数返回1;0返回0
static String toBinaryString(int i)将i转成二进制
static String toHexString(int i)将i转成十六进制
static String toOctalString(int i )将i转成八进制
常用方法
static int parseInt(String s)字符串转int
static Integer valueOf(String s)字符串转Integer
String toString()Integer转String
boolean equals(Object obj)判断两个Integer是否相等

http://chatgpt.dhexx.cn/article/X0XvQpfx.shtml

相关文章

Java为什么要有基本数据类型和包装类型

作为面向对象语言为代表的Java, 在很多任务场景中经常看到它的身影。那么,Java为什么要有基本数据类型和包装类型? 这个问题看似简单,其实也不好回答。毕竟这个问题不仅你我感觉到困惑,许多大佬也感觉到困惑,一些人希望…

基本类型和包装类型的区别详解

六年前,我从苏州回到洛阳,抱着一幅“海归”的心态,投了不少简历,也“约谈”了不少面试官,但仅有两三个令我感到满意。其中有一位叫老马,至今还活在我的手机通讯录里。他当时扔了一个面试题把我砸懵了&#…

Boolean类型(基本与包装类型)

前面的话 当 Number、String、Boolean使用new操作符时,它们就不仅仅是基本类型了,变成了基本的包装类型,即引用类型。Boolean类型应该算是这三种类型中最简单的类型,这篇文章将介绍Boolean类型。 定义 Boolean类型只有两个字面…

34、Java 中有了基本数据类型,为什么还需要有包装类型?包装类型是啥?

文章目录 一、引入(基本数据类型弊端)二、包装类(1) 模拟包装类的实现(2) 包装类(Wrapper Class)(3) 自动装箱、自动拆箱① 自动装箱② 自动拆箱 三、整数类型包装类细节 ☆ 一、引入(基本数据类型弊端) &…

包装类和基本类型

什么是包装类 所谓包装类,就是能够直接将简单类型的变量表示为一个类,在执行变量类型的相互转换时,我们会大量使用这些包装类。 包装类 包装类有以下用途 1.集合不允许存放基本数据类型,故常用包装类 2.包含了每种基本类型的相…

包装类型和基本类型

包装类型和基本类型 Java中有八种基本数据类型,分别对应着八大包装类型,因为包装类型的实例都存在于堆中,所以包装类型也称为引用类型。 基本类型属于原始数据类型,变量中存储的就是原始值。包装类型属于引用数据类型&#xff0…

Java 的八大基本类型及其包装类型(超级详细)

Java 中有八种内置的基本数据类型,他们分别是 byte、short、int、long、float、double、char 和 boolean,其中,byte、short、int 和 long 都是用来表示整数,float 和 double 是用来表示浮点数的,那它们之间有什么区别和…

Java 八大包装类(超详细!)

一、8种基本数据类型对应的包装类型名 基本数据类型包装类型bytejava.lang.Byte(父类Number)shortjava.lang.Short(父类Number)intjava.lang.Integer(父类Number)longjava.lang.Long(父类Numbe…

关于InnoDB的读写锁类型以及加锁方式

(本文为了方便,英文关键词都都采用小写方式,相关知识点会简单介绍,争取做到可以独立阅读) 文章开始我会先介绍本文需要的知识点如下: innodb的主键索引(一级索引)和二级索引&#x…

C++线程中的几类锁

C线程中的几类锁 多线程中的锁主要有五类:互斥锁、条件锁、自旋锁、读写锁、递归锁。一般而言,所得功能与性能成反比。而且我们一般不使用递归锁(C提供std::recursive_mutex),这里不做介绍。 互斥锁 互斥锁用于控制多…

Oracle - 锁

锁概念 锁出现在数据共享的环境中,它是一种机制,在访问相同资源时,可以防止事务之间的破坏性交互。例如,在多个会话同时操作某表时,优先操作的会话需要对其锁定。 事务的分离性要求当前事务不能影响其他的事务&#…

用友数据库错误“未能读取并闩锁页(1:3355)(用闩锁类型SH)”修复

客户硬盘无法识别,检测后,硬盘有坏道,由于数据库正在坏道上,所以恢复出来的用友数据库无法附加。 通过无日志附加后,做DBCC检测数据库出现以下错误: “消息8966,级别16,状态1&#x…

Mysql中锁的类型有哪些?

Mysql中锁的类型有哪些? 1. 基于锁的属性分类:共享锁、排他锁2. 基于锁的粒度分类:行级锁(INNODB)、表级锁(INNODB、MYISAM)、页级锁(BDB引擎)、记录锁、间隙锁、临键锁。…

mysql 常见锁的类型(一)

文章目录 一、锁的分类1.1 加锁的目的1.2 锁的类别 二、乐观锁和悲观锁2.1. 乐观锁2.2. 悲观锁: 三、共享锁与排他锁四、表锁五、意向锁六、行级锁七、记录锁(Record Locks)八、间隙锁(Gap Locks)九、临键锁&#xff0…

MySQL-InnoDB常用锁类型解析

Shared(乐观锁) and Exclusive Locks(互斥锁): InnoDB有两种锁类型,Shared(s) and Exclusive(x) Locks(乐观锁和互斥锁)。 Shared&…

MySql InnoDB锁类型

MySql InnoDB锁类型 从类型上来分类,InnoDB存储引擎实现了两种标准的锁 共享锁(S-Lock):允许事务读一行数据 排它锁(X-Lock):允许事务删除或者更新一行数据 如果一个事务获取了S锁,那么其他事务也可以立即获得S锁,…

锁的分类总结

锁的分类是从不同角度去看的。同一个锁也可以同时属于多种类型。 一、乐观锁与悲观锁 1. 互斥同步锁的劣势 阻塞和唤醒会带来性能的劣势 用户态和核心态切换上下文切换检查是否有被阻塞线程需要被唤醒等等 可能出现永久阻塞的问题:持有锁的线程永久阻塞了&#…

锁的介绍和分类(轻量级锁 重量级锁 偏向锁 自旋锁 互斥锁)

目录 公平锁 非公平锁 非公平锁 公平锁 可重入锁 不可重入锁 可重入锁(递归锁) 不可重入锁 轻量级锁 重量级锁 偏向锁 重量级锁 自旋锁(循环上锁) 轻量级锁 轻量级锁的释放 偏向锁 自旋锁和互斥锁 自旋锁 互斥锁 为何要使用自旋锁 自旋…

最全锁种类

你可能听说过很多锁,也看到过很多文章讲解锁,这篇我在这里将对锁的不同分类进行描述锁的设计 互斥锁–共享锁 互斥锁:顾名思义,就是互斥的,意思就是当前同步代码块只能被一个线程访问,sync、reentrantlock、…

锁的类型有哪些

锁的类型有哪些 基于锁的属性分类:共享锁、排他锁。 基于锁的粒度分类:行级锁(INNODB)、表级锁(INNODB、MYISAM)、页级锁(BDB引擎 )、记录锁、间隙锁、临键锁。 基于锁的状态分类:意向共享锁、意向排它锁 共享锁(Share Lock) 共享锁又称读锁&…