Java数据类型、拆箱和装箱【学习笔记】

在这里插入图片描述
1.Primitive type一共十来个,都是系统内建数据类型,没办法增加或自定义。
2.剩下的所有类型都叫object。
3.Primitive type 有 object 和它相对应。
4.String没有相对应的Primitive type。
在这里插入图片描述

简单了解装箱和拆箱

在这里插入图片描述
值类型:数值是多少就是多少
EG:5==5
在这里插入图片描述

  • a.equals(b)还要判断a是不是null
  • a是null会抛出java.lang.NullPointerException异常
  • 但是Objects.equals(a,b):a,b就没有上述问题。

从Java的角度:

  1. 为每个类协写上equals函数
  2. 当把a赋值给b的时候,说明a和b2个变量都会应用同一个Object,
  3. a改变Object,就会影响到b的值
  4. 因为他们应用的是同一个Object

从C++的角度:

  1. 所有变量只要不是Primitive type,就一定是引用类型,
  2. 不存在值传递和引用传递的概念

什么叫引用类型

在这里插入图片描述
在这里插入图片描述

  • Object是对象,东西,不是数值
  • Object这个东西 包含数值(小写部分)
    拓展
    1、什么是装箱和拆箱(Boxing 和 UnBoxing)?
    装箱是将值类型转换为引用类型 ;拆箱是将引用类型转换为值类型。(网上广为流传)
    点击这里

值类型

Int a = 2;
把a的值赋成2

引用类型

在这里插入图片描述
把2装进箱子:

  • 箱子的类型是Integer,箱子装的数值是2,
  • a指向箱子。
    在这里插入图片描述
    是装箱操作
    (1) 不是把new Integer(2)赋值给b,
    (2) 而是生成新的箱子(空的),里面放了2,
    (3) 让b指向箱子
    a==b?会发生什么呢?
    a和b同时指向一个箱子,另一个箱子没人要,
    Java垃圾回收掉另一个箱子

拆箱Unboxing

把箱子里的数值拿出来
在这里插入图片描述

  • int v:v是一个数值
  • a.intValue():把里面的int的Value拿出来

常见问题

在这里插入图片描述
第3个◆:

  1. 右边Integer.valueOf(2):返回一个箱子,箱子里的值是2,
  2. 返回箱子的时候,可能会自己新建一个,可能会用一个现有的箱子返回

左边Integer.valueOf(2)什么时候会等于右边Integer.valueOf(2)?
(1) 当系统先把装2的箱子建立好,并且缓存起来,
(2) 把箱子的应用同时发给等号的左边和右边。

package interview.lang;

public class BoxingDemo
{

	public static void main(String[] args)
	{
		System.out.println("new Integer(2)==2?" + (new Integer(2) == 2));
		System.out.println("new Integer(2)==new Integer(2)?" + (new Integer(2) == new Integer(2)));
		System.out.println("Integer.valu eOf(2)==Integer.valueOf(2)" + (Integer.valueOf(2) == Integer.valueOf(2)));
		System.out.println("Integer.valueOf(2).intValue()==2?" + (Integer.valueOf(2).intValue() == 2));
		System.out.println("new Integer(2).equals(new Integer(2))?" + (new Integer(2).equals(new Integer(2))));
	}

}

在这里插入图片描述

第1个◆:

在这里插入图片描述

  • 等号左边:Object
  • 等号右边:value
  • Object≠value
  • 但是:Java编译器自动做Boxing and UnBoxing

左边:

  1. 做的是UnBoxing拆箱,把Integer(2)里的int值取出来(2),
  2. 再来看2==2?
  3. 结果2==2

第2个◆:

在这里插入图片描述
左边:
new integer(2):新建箱子,值为2
右边:
new integer(2):新建箱子,值为2
==:

  • 判断2个箱子是不是同一个,
  • 不比较箱子里的值
  • 结果:false
  • 是2个不同的箱子

第3个◆:

在这里插入图片描述

  • valueOf():系统分配的一个箱子
  • 调用valueOf(2):每次都分配同一个箱子

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
回答:他们可能相等可能不相等,这是系统决定的

第4个◆:

在这里插入图片描述

  • Integer.valueOf(2):装箱
  • .intValue():拆箱,把箱子里的值2拿出来
  • 值 == 值——>2==2

第5个◆:

在这里插入图片描述
equals:

  • 判断Integer里面的值是不是相等的。
  • 不会判断他们是不是同一个箱子。

在这里插入图片描述

  • 传入参数:对方的Object类型的obj
  • 判断对方obj是不是Integer类型
  • 是,转成Integer,把里面的value取出来,再判断他们的值相不相等
  • 不是返回false
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值