java知识点梳理——装箱和拆箱

lbxx      2022-04-06     500

关键词:

1、前言:Java是典型的面向对象编程语言,但其中有8种基本数据类型不支持面向对象编程,基本数据类型不具备对象的特性,没有属性和方法;Java为此8种基本数据类型设计了对应的类(包装类),使之相互转换,间接实现基本数据类型具备对象特性,丰富基本数据类型操作;

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


 

 

 

 

 

 


 注:int是基本数量类型,Integer是类;int和Ingeger初始值不同(int默认值0 Ingeger默认值null);Integer包含属性和方法,int则没有;基本数据类型和包装类相互转换的过程叫装箱和拆箱;

2、装箱:基本数据类型转换成对应的包装类(int——>Integer);

1 Integer i = new Integer(10); // 手动装箱
2 Integer i = 10; // 自动装箱

3、拆箱:包装类转换成基本数据类型(Integer——>int);

1 Integer i =10; // 自动装箱
2 int m = i; // 自动拆箱
3 int n = i.intValue(); // 手动拆箱

4、自动装箱和自动拆箱:Java 1.5以后才有自动装箱、拆箱的特性;自动装箱是通过包装类的valueOf方法实现;自动拆箱是通过包装类的xxxValue方法实现

1 Integer i = Integer.valueOf(10); // 调用valueOf方法自动装箱
2 int n = i.intValue(); // 调用intValue方法自动拆箱

 注:自动装箱会隐式地创建对象,在一个循环中注意自动装箱问题,影响程序性能;

5、equals 和 == 比较:当 "=="运算符的两个操作数都是包装类,则是比较指向的是否是同一个对象,而如果其中有一个操作数是表达式(即包含算术运算)则比较的是数值(触发自动拆箱);对于包装类,equals方法不会进行类型转换

 1 public class Main {
 2     public static void main(String[] args) {
 3          
 4         Integer a = 1;
 5         Integer b = 2;
 6         Integer c = 3;
 7         Integer d = 3;
 8         Integer e = 321;
 9         Integer f = 321;
10         Long g = 3L;
11         Long h = 2L;
12          
13         System.out.println(c==d); // true
14         System.out.println(e==f); // false
15         System.out.println(c==(a+b)); // true
16         System.out.println(c.equals(a+b)); // true
17         System.out.println(g==(a+b)); // true
18         System.out.println(g.equals(a+b)); // false
19         System.out.println(g.equals(a+h)); // true
20     }
21 }

 解析:JVM会缓存-128到127的Integer对象(Short、Byte、Character、Long与Integer类似),所以第一个是同一个对象true,第二个是new的新对象false;第三个有+法运算比较的是两边的值true;第四个有+法运算且两边的数据类型相同true;第五个同四先求+法求和 ,==会进行类型转换(Long)true;第六个先+法求和,equals不会类型转换false;第七个先+法求和(触发拆箱,变成了int类型和long类型相加,这个会触发类型晋升,结果是long类型的)equals比较时触发装箱比较两边都是Long类型结果true;

 





深入剖析java中的装箱和拆箱

阅读目录一.什么是装箱?什么是拆箱?二.装箱和拆箱是如何实现的三.面试中相关的问题自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的... 查看详情

深入剖析java中的装箱和拆箱

原文出处: 海子自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。... 查看详情

java自动装箱和拆箱

https://www.cnblogs.com/wang-yaz/p/8516151.html 一、什么是自动装箱拆箱 很简单,下面两句代码就可以看到装箱和拆箱过程1//自动装箱2Integertotal=99;34//自动拆箱5inttotalprim=total;简单一点说,装箱就是自动将基本数据类型转换为包装... 查看详情

java装箱和拆箱

每次看到某篇博客里面说要静下心来欣赏源码,我都很感慨,我的耐心没人家好。是真的要静下心来读源码,因为说不定就像作者说的那样“说不定你就发现了一个优秀的设计呢!!!”才不久就被同事说了,学知识的时... 查看详情

为啥我们在 Java 中使用自动装箱和拆箱?

】为啥我们在Java中使用自动装箱和拆箱?【英文标题】:WhydoweuseautoboxingandunboxinginJava?为什么我们在Java中使用自动装箱和拆箱?【发布时间】:2015-02-2304:36:24【问题描述】:自动装箱是Java编译器进行的自动转换在原始类型及其... 查看详情

java基础自动装箱和拆箱面试题

JDK1.5(以后的版本)的新特性自动装箱和拆箱1.自动装箱:把基本类型转换为包装类类型 inta=10; Integeri=newInteger(a); Integervalue=10; 为什么基本类型就能直接转化为Integer,Integer不应该是new出来的吗 内部会自动的newInteger(10)自动装箱 2.... 查看详情

为啥有些语言需要装箱和拆箱?

】为啥有些语言需要装箱和拆箱?【英文标题】:WhydosomelanguagesneedBoxingandUnboxing?为什么有些语言需要装箱和拆箱?【发布时间】:2009-06-2419:19:24【问题描述】:这不是什么是装箱和拆箱的问题,而是为什么像Java和C#这样的语言... 查看详情

java自动装箱和拆箱(待整理)(代码片段)

含义装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。Integeri=10;//装箱intn=i;//拆箱publicclassMainpublicstaticvoidmain(String[]args)Integeri=10;intn=i;从反编译得到的字节码内容... 查看详情

java核心:java中的装箱和拆箱

一、为什么需要装箱和拆箱?  基础数据类型是数据,不是对象,也不是Object的子类。Java为每种基本数据类型都提供了对应的包装器类型。装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为... 查看详情

装箱和拆箱深度理解

...=newCustomclass()Objectobj=myclass;运行上面这段代码,我们会进行装箱操作吗? 基础知识:.Net的类型分为两种,一种是值类型(ValueType),另一种是引用类型(ReferenceType)。这两个类型的本质区别,值类型数据是分配在栈中,而 查看详情

java中装箱和拆箱的代码

建议使用1.5或以上的jdk运行,//装箱 值类型到引用类型  inti=10;  Objectobject=i;  System.out.println(object);      //拆箱引用类型到值类型  Objecto=10; &n 查看详情

java-装箱和拆箱(谁动了我的变量?)(代码片段)

文章目录装箱拆箱==null猫:拆箱?没人比我更懂拆箱了。装箱八大基本类型都有一个与之对应的类:基本类型类byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean除了后两个Character和Boolean类是Objec... 查看详情

为啥我们需要在 C# 中装箱和拆箱?

】为啥我们需要在C#中装箱和拆箱?【英文标题】:WhydoweneedboxingandunboxinginC#?为什么我们需要在C#中装箱和拆箱?【发布时间】:2011-01-0721:14:39【问题描述】:为什么我们需要在C#中装箱和拆箱?我知道装箱和拆箱是什么,但我无... 查看详情

装箱和拆箱

装箱和拆箱所谓的装箱和拆箱呢,也就是值类型和引用类型之间的转换.  而为什么会有转换呢?是因为这两个不在同一个环境,一个在线程栈,一个在托管堆上什么是值类型  值类型也就是一般不包含指向实例的指针,一般用struct... 查看详情

装箱和拆箱-----------操作和概念

-------装箱和拆箱---------数据类型按照存储方式可以分为值类型和引用类型,两者仍然可以相互转换,将值类型转换为引用类型的过程称为装箱。反之则为拆箱。staticvoidMain(string[]args){inti=123;objecto=i;//装箱inti=(int)0;/、拆箱}  --... 查看详情

装箱和拆箱

概念:装箱:就是将值类型转换为引用类型  (int doublechar bool decimalenum struct)拆箱:就是将引用类型转换为值类型 (string 数组 自定义类 object)usingSystem;namespaceDome{staticclassDome{staticv 查看详情

c#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)

...如何在它上面调用方法?二:值类型转换为引用类型——装箱  2.1CLR对值类型进行装箱时:新分配托管堆内存,将值类型的实例字段拷贝到新分配的内存中,返回托管堆中新分配对象的地址。这个地址 查看详情

c#装箱和拆箱

装箱是将值类型转换为引用类型的隐式转换,当CLR对值类型进行装箱时,会将该值包装到System.Object内部,再将后者存储在托管堆上。拆箱是将引用类型转换为值类型的显示转换 。 查看详情