JAVA几个基本概念的区别(成员变量与局部变量,基本数据类型与引用数据类型,基本数据类型与包装类,拆箱与装箱)

局部变量和成员变量的区别

1 类中位置不同(成员变量在类中方法外,局部变量在类中方法中)
2 作用域不同(成员变量作用于整个类中,而局部变量只能作用于方法中)
3 生命周期不同(.从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动消失)
4 初始化值/默认值不同 (有无默认值) :成员变量如果没有被赋初值,则会自动以类型的默认值而赋值(一种情况例外被final修饰但没有被static修饰的成员变量必须显示地赋值);而局部变量则不会自动赋值。
5 内存中位置不同(成员变量是对象的一部分,而对象存在于堆内存,局部变量存在于栈内存 )
在这里插入图片描述

基本数据类型和引用数据类型的区别

存储不同
基本数据类型的变量在栈中存储的是值,引用数据类型的变量在栈中存储的引用,具体内容存在堆中
传递方式
方法中的基本数据类型的变量在调用方法作为参数是按数值传递 ,引用数据类型变量在调用方法时作为参数是按引用传递的

基本数据类型和包装类

1.包装类可以用在泛型里 基本数据类型不可以
2.包装类要比较值是否相同必须使用equals 基本数据类型使用 ==
3.包装类是对象,对象的调用都是通过引用对象的地址,基本数据类型直接使用的值
4.传递方式不同:包装类型是引用传递 基本数据类型是值传递
5.声明方式不同:基本数据类型不需要new关键字. 包装类型需要new在堆内存中分配内存空间
6.存储位置不同:基本数据类型直接将值保存在值栈中;包装类型是把对象放在堆中,然后通过对象的引用来调用他们
7.初始化值不同:int的初始值为 0 、 boolean的初始值为false 包装类型的初始值为null
8:使用方式不同,基本数据类型直接赋值使用就好 ,而包装类型是在集合如 coolection Map时会使用

拆箱 装箱

基本数据类型转为/赋值给 包装类为自动装箱 底层调用的方法为 包装类类名.valueOf(基本数据类型变量值)
包装类转为/赋值 给基本数据类型为自动拆箱 底层调用的方法为 包装类变量值.基本数据类value()
JDK5之后就实现自动拆装箱了
基本数据类型和包装类型使用==比较的时候,包装类一定会进行自动拆箱,进行值比较
包装类要使用各种算术运算符进行运算的时候一定会进行自动拆箱,使用值进行运算
包装类和包装类 == 比较的时候就比较地址值了 equals比较值
在这里插入图片描述
上图中,int值在赋值给Integer的时候,底层进行了自动装箱,调用了Integer.valueOf()方法
在这里插入图片描述
可以清晰看到当值范围在IntegerCache.low与IntegerCache.high也就是-128到127之前,值都是从缓存里面取的。不在这个范围的内的值都会重新创建一个Integer对象.
基本数据类型的四种整数类型在自动装箱的时候都存在缓存的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值