Java数据类型、基本与引用数据类型区别、装箱与拆箱、a=a+b与a+=b区别

1.Java有哪些数据类型

8种基本数据类型

  • 6种数字类型(4个整数型,两个浮点型)byte、short、int、long、float、double
  • 1种字符类型:char
  • 1种布尔类型 :boolean

byte:

  • byte数据类型是8位、有符号的,以二进制补码表示的整数
  • 最小值-128(-2^7)
  • 最大值127(2^7-1)
  • 默认值为0
  • byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;
  • 1 byte = 1字节 = 8bit 可表达 2的八次方个数字
    1 short= 2字节 = 16bit 可表达2的十六次方个数字
    1 int = 4字节 = 32bit 可表达2的32次方
  • 如果考虑符号位,最大值就要减1

short:

  • short类型16位,有符号的,以二进制补码表示的整数
  • 最小值-32768(-2^15)
  • 最大值32767(2^15-1)
  • Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;
  • 默认值是0

int:

  • int类型32位,有符号的,以二进制补码表示的整数
  • 最小值-21,4748,3648(-2^31)
  • 最大值21,4748,3647(2^31-1)
  • 默认值为0

long:

  • **注意:**Java 里使用 long 类型的数据一定要在数值后面加上 L,否则将作为整型解析

  • long 数据类型是 64 位、有符号的以二进制补码表示的整数;

  • 最小值是 -9,223,372,036,854,775,808(-2^63);

  • 最大值是 9,223,372,036,854,775,807(2^63 -1);

  • 这种类型主要使用在需要比较大整数的系统上;

  • 默认值是 0L

float

  • float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;

  • float 在储存大型浮点数组的时候可节省内存空间;

  • 默认值是 0.0f

  • 浮点数不能用来表示精确的值,如货币!;

double

  • double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数;

  • 浮点数的默认类型为double类型;

  • double类型同样不能表示精确的值,如货币;

  • 默认值是 0.0d

char

  • char类型是一个单一的 16 位 Unicode 字符;

  • 最小值是 \u0000(即为 0);

  • 最大值是 \uffff(即为 65535);

  • char 数据类型可以储存任何字符;

boolean

  • boolean数据类型表示一位的信息;

  • 只有两个取值:true 和 false;

  • 这种类型只作为一种标志来记录 true/false 情况;

  • 默认值是 false

这八种基本类型都有对应的包装类分别为:Byte、Short、Integer、Long、Float、Double、Character、Boolean

image-20230218130526666

2.Java中引用数据类型有哪些,它们与基本数据类型有什么区别?

引用数据类型分3种:类,接口,数组;

从概念方面来说

1,基本数据类型:变量名指向具体的数值

2,引用数据类型:变量名不是指向具体的数值,而是指向存数据的内存地址。

从内存的构建方面来说(内存中,有堆内存和栈内存两者)

1,基本数据类型:被创建时,在栈内存中会被划分出一定的内存,并将数值存储在该内存中.

2,引用数据类型:被创建时,首先会在栈内存中分配一块空间,然后在堆内存中也会分配一块具体的空间用来

存储数据的具体信息,即hash值,然后由栈中引用指向堆中的对象地址.

image-20230218131006664

从使用方面来说

1,基本数据类型:判断数据是否相等,用==和!=判断。

2,引用数据类型:判断数据是否相等,用equals()方法,==和!=是比较数值的。而equals()方法是比较内存

地址的。

3.Java中的自动装箱与拆箱

参考这位博主hh

https://blog.csdn.net/swadian2008/article/details/128290566

4.为什么要有包装类型?

让基本数据类型也具有对象的特征

image-20230218135604802

为了让基本类型也具有对象的特征,就出现了包装类型(如我们在使用集合类型Collection时就一定要使

用包装类型而非基本类型)因为容器都是装object的,这是就需要这些基本类型的包装器类了。

自动装箱: new Integer(6); ,底层调用: Integer.valueOf(6)

自动拆箱: int i = new Integer(6); ,底层调用 i.intValue(); 方法实现。

二者的区别:

  • 声明方式不同:基本类型不使用new关键字,而包装类型需要使用new关键字来在堆中分配存储空

  • 存储方式及位置不同:基本类型是直接将变量值存储在栈中,而包装类型是将对象放在堆中,然后

通过引用来使用;

  • 初始值不同:基本类型的初始值如int为0,boolean为false,而包装类型的初始值为null;

  • 使用方式不同:基本类型直接赋值直接使用就好,而包装类型在集合如Collection、Map时会使用

到。

5.a=a+b与a+=b有什么区别吗?

+= 操作符会进行隐式自动类型转换,此处a+=b隐式的将加操作的结果类型强制转换为持有结果的类型,而

a=a+b则不会自动进行类型转换.如:

byte a = 127;
byte b = 127;
b = a + b; // 报编译错误:cannot convert from int to byte
b += a;

以下代码是否有错,有的话怎么改?

short s1= 1;
s1 = s1 + 1;

有错误.short类型在进行运算时会自动提升为int类型,也就是说 s1+1 的运算结果是int类型,而s1是short

类型,此时编译器会报错.

正确写法

short s1= 1;
s1 += 1;

码是否有错,有的话怎么改?

short s1= 1;
s1 = s1 + 1;

有错误.short类型在进行运算时会自动提升为int类型,也就是说 s1+1 的运算结果是int类型,而s1是short

类型,此时编译器会报错.

正确写法

short s1= 1;
s1 += 1;

+= 操作符会对右边的表达式结果强转匹配左边的数据类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小熊佩萁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值