java基础 之 数据类型【一】(基本数据类型、装箱和拆箱)

本文详细介绍了Java中的八种基本数据类型:byte、short、char、int、long、float、double和boolean,包括它们的字节数、取值范围和应用场景。同时,解释了装箱和拆箱的概念,以及Integer缓存区的工作原理,通过实例展示了装箱和拆箱过程中可能出现的等值判断问题。
摘要由CSDN通过智能技术生成

一、数据类型(八种)

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
在这里插入图片描述

1、byte(1B)

简介

  • 字节(Byte )是计算机信息技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串,是构成信息的一个小单位。最常用的字节是八位的字节,即它包含八位的二进制数
  • 字节通常简写为“B”,而位通常简写为小写“b”,计算机存储器的大小通常用字节来表示。

范围

  • Byte数据类型(字节型)用一个字节(Byte)储存,可区别256个数字,取值范围:0到255。 Byte是从0-255的无符号类型,所以不能表示负数

换算

  • 1KB(Kilobyte,千字节)=1024B= 2^10 B;
  • 1MB(Megabyte,兆字节,百万字节)=1024KB= 2^20 B;
  • 1GB(Gigabyte,吉字节,十亿字节)=1024MB= 2^30 B;
  • 1TB(Terabyte,万亿字节,太字节)=1024GB= 2^40 B;

栗子

byte a = 100;
byte b = -50;

2、short(2B)

简介

  • short在C语言中是定义一种整型变量家族的一种。
  • short 数据类型是 16 位有符号的以二进制补码表示的整数。

范围

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

栗子

short a = 100; 
short b = -200;

3、char(2B)

简介

  • char是表示的是char类型是一个单一的 16 位 Unicode 字符,定义的时候用单引号,只能存储一个字符
  • char 数据类型可以储存任何字符。

范围

  • Unicode:采用的是十六进制形式,取值范围是**\u0000(即为0)** - \uffff(即为65535)

栗子

char x='a';
//内存x中存储的是字符a在Unicode字符集中的排序位置97 
//因此允许将上面的语句写成
char x=97;

4、int(4B)

简介

  • int 数据类型是32位有符号的以二进制补码表示的整数。

范围

  • int的数据范围为-2147483648 ~ 2147483647 [-2^31 ~2^31-1]

栗子

int a = 100;
int b = -100;

5、long(8B)

简介

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

范围

  • long的数据范围为-9223372036854775808~-9223372036854775807 [-2^63 ~2^63-1]
  • 默认值为0L

栗子

long a = 100L;
long b = -100L;

6、float(4B)

简介

  • float 数据类型是单精度32位、符合IEEE 754标准的浮点数。
  • 浮点数不能用来表示精确的值,如货币。

范围

  • 由于尾数的高顺序位始终为 1,因此它不是以数字形式存储的。此表示形式为 float 类型提供了一个大约在 -3.4E+38 ~ 3.4E+38 之间的范围。
  • 默认值是 0.0f

栗子

float f1 = 234.5f;
float f2 = -234.5f;

7、double(8B)

简介

  • double 数据类型是双精度64 位、符合IEEE 754标准的浮点数。
  • 浮点数的默认类型为double类型。
  • double类型同样不能表示精确的值,如货币

范围

  • 它可以表示十进制的15或16位有效数字,负值取值范围为 -1.7976E+308-4.94065645841246544E-324,正值取值范围为4.94065645841246544E-3241.797693E+308
  • 默认值是 0.0d

栗子

double d1 = 234.5d;
double d2 = -234.5d;

8、boolean(1B)

简介

  • boolean 数据类型 boolean 变量存储为 **8 位(1 个字节)**的数值形式,但只能是 True 或是 False
  • 在java中boolean值只能是true和false,而不能用0和1代替,并且一定要小写
  • 该类型的名称是为了纪念英国数学家George Boole

范围

  • 这种类型只作为一种标志来记录 true/false 情况
  • 默认值是 false

栗子

boolean one = true;
boolean two = false;

二、装箱和拆箱

1、定义

装箱

  • 装箱就是把基础类型封装成一个。比如把int封装成Integer,这时你就不能把他当成一个数了,而是一个类了,对他的操作就需要用它的方法了。

  • 假如码头上有很多货物 这些货物需要装到集装箱才能装船运走(这个可以比作把自定义变量打包),把这个步骤比作装箱。

  • 栗子:

Integer i = 100;//装箱

拆箱

  • 拆箱就是把转换成基础类型。比如你算个加法什么的是不能用类的,就得把它转换成基本类型。
  • 当卸载货物时候 需要打开集装箱 然后发往各处(这个可以比作 值得调用) 把这个步骤比作拆箱。
  • 栗子:
int n = i;//拆箱

2、对应关系

原始类型包装类型
booleanBoolean
byteByte
charCharacter
shortShort
intInteger
longLong
floatFloat
doubleDouble

3、代码

常见的面试代码

public void testAutoBox2() {
     //1
     int a = 100;
     Integer b = 100;
     System.out.println(a == b);
     
     //2
     Integer c = 100;
     Integer d = 100;
     System.out.println(c == d);
     
     //3   
     c = 200;
     d = 200;
     System.out.println(c == d);
}
  • 打印结果居然是!!!???【黑人脸.png】
  • ture
  • ture
  • false
private static class IntegerCache {
  static final int low = -128;
  static final int high;
  static final Integer cache[];

  static {
  int h = 127;
  String integerCacheHighPropValue =
          sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
  if (integerCacheHighPropValue != null) {
     try {
         int i = parseInt(integerCacheHighPropValue);
         i = Math.max(i, 127);
         // Maximum array size is Integer.MAX_VALUE
         h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
        } catch( NumberFormatException nfe) {
         // If the property cannot be parsed into an int, ignore it.
       }
     }
     high = h;

     cache = new Integer[(high - low) + 1];
     int j = low;
     for(int k = 0; k < cache.length; k++)
        cache[k] = new Integer(j++);
  ....
  • 这是IntegerCache静态代码块中的一段,默认Integer cache 的下限是**-128**,上限默认127
  • 我们上面当赋值100给Integer时,刚好在这个范围内,所以从cache中取对应的Integer并返回,所以两次返回的是同一个对象,所以==(对象地址)比较是相等的。
  • 当赋值200给Integer时,不在cache 的范围内,所以会创建new Integer并返回,对象的地址不一样,当然比较的结果是不相等的。

总结:

当 i 在 [-128,127] 的范围时,直接把静态内部类 IntegerCache 中已经存在这些 Integer 对象返回,如果 i 不在此范围内就 new Integer(i) 返回。也就是说以这种方式创建两个相同且在 [-128,127] 范围内的 Integer 对象,这两个引用指向堆中相同的一个 Integer 对象。

借鉴:https://blog.csdn.net/Little_person/article/details/79048637
参考:https://www.jianshu.com/p/bbe6bffcb03b

【END】初次学习若有不正之处请见谅,欢迎留言指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值