Java的8种基本数据类型和3种引用数据类型

2. Java数据类型概述

变量就是申请内存来存储值,即当创建变量的时候,需要在内存中申请空间。
内存管理系统根据变量的类型为变量分配存储空间,确定了变量的类型,即确定了数据需分配内存空间的大小,数据在内存的存储方式。

Java两大数据类型:内置数据类型/基本数据类型、引用数据类型

  • 基本数据类型:都是直接存储在内存中的内存上,数据本身的值就是存储在栈空间;
  • 引用数据类型:引用类型继承于Object类,引用(即指针)是存储在有序的内存栈上,而对象本身的值存储在内存堆中。

3. 内置数据类型/基本数据类型(8种)

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

具体如下:

类型概述范围默认值作用例子
byte8位、有符号,以二进制补码表示的整数-2^7 ~ (2^7-1),即 -128 ~ 1270byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用的空间只有int的四分之一;例子:byte a=-2
short16位,有符号,以二进制补码表示的整数-2^15 ~ 2^15-1, 即 -32768 ~ 327670short占用空间是int的二分之一例子:short s=-20000
int32位、有符号,以二进制补码表示的整数-2^31 ~ 2^31-10一般整数型默认为int类型;例子:int=-200000
long64位、有符号,以二进制补码表示的整数-2^63 ~ 2^63-10L主要使用在需要比较大整数的系统上例子:long a=10000L
float32位、单精度,浮点数浮点数不能用于表示精确的值0.0f在存储大型浮点数组的时候可以节省内存空间例子:float f1=0.3f
double64位、双精度,浮点数double也不能表示精确的值0.0d浮点数的默认类型为double类型例子:double d1=12.3
boolean表示一位的信息取值:true/falsefalse只作为一种标志类记录 true/false 情况例子:boolean one=true
char是一个单一的16位Unicode字符\u0000(即0)~\uffff(65,535)‘\u0000’char可以存储任何字符例子:char letter=‘A’

4.1 自动类型转换

必须满足转换前的数据类型的位数要低于转换后的数据类型,例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float数据类型的位数为32,可以自动转换为64位的double类型。

4.2 实例

public class ZiDongLeiZhuan{
       public static void main(String[] args){
            char c1 ='a';//定义一个char类型
            int i1 = c1;//char自动类型转换为int
            System.out.println("char自动类型转换为int后的值等于"+i1);
            char c2 = 'A';//定义一个char类型
            int i2 = c2+1;//char 类型和 int 类型计算
            System.out.println("char类型和int计算后的值等于"+i2);
        }
}

运行结果为:

char自动类型转换为int后的值等于97
char类型和int计算后的值等于66

**解析:**c1 的值为字符 a ,查 ASCII 码表可知对应的 int 类型值为 97, A 对应值为 65,所以 i2=65+1=66。

4.3 强制类型转换

  • 条件是转换的数据类型必须是兼容的。
  • 格式:(type)value type是要强制类型转换后的数据类型 实例:

5. 实例

  public class QiangZhiZhuanHuan{
      public static void main(String[] args){
          int i1 = 123;
          byte b = (byte)i1;//强制类型转换为byte
          System.out.println("int强制类型转换为byte后的值等于"+b);
      }
  }

运行结果:

  int强制类型转换为byte后的值等于123

5.1 隐含强制类型转换

  • 整数的默认类型是 int。
  • 浮点型不存在这种情况,因为在定义 float 类型时必须在数字后面跟上 F 或者 f。

6. 基本数据类型和封装类的区别

  1. 定义不同。封装类是对象,基本数据类型不是;
  2. 使用方式不同。封装类需要先new初始化,再通过JVM根据具体情况实例化后赋予定值,基本数据类型可以直接赋值,某些集合类型必须使用包装类,不能使用基本数据类型,如ArrayList
  3. 初始值不同。包装类初始值默认为null,基本数据类型根据类型不同而值不同;
  4. 存储方式和位置不用。封装类分拆引用和实例,引用存储在栈(stack),具体实例存储在堆(heap),基本数据类型存储在栈中(stack)。

7. 为什么需要包装类

  1. 包装类封装在java.lang包中;

  2. 基本数据类型没有toString()方法;

  3. 编码过程中只接收对象的情况,比如List中只能存入对象,不能存入基本数据类型;比如一个方法的参数是Object时,不能传入基本数据类型,但可以传入对应的包装类; 比如泛型等等。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GFBdoV5Y-1636975847050)(C:\Users\wsy\AppData\Roaming\Typora\typora-user-images\1612749050632.png)]

8. 表现形式(具体如上表)

  1. 整数型有三种表现形式。分别是十进制、八进制(以0开头)、十六进制(以0X或者0x开头);
  2. 对于long型的数值,如果值大于int型数值最大值或者小于int型数值的最小值时,应该在数值的末尾加上L或者l(小写的L),来表示该数值是long型的。如long num=2147483650L;
  3. 默认情况下,Java中的小数都是double型的,若要声明一个小数是float型的,则需要在数值的末尾加上F或者f,注意,必须要加F或者f,否则会出错。如float num=12.34F;
  4. char ch=’a’;和char ch=97;这两个式子等价,其中97是字母a在Unicode表中的排序位置,取值范围为065535(十进制),也即0x00000xffff(十六进制);
  5. Unicode编码表中共有65535个字符,涵盖了几乎所有国家的所有语言所涉及的符号,各个符号在Unicode表中的位置依次对应于0x0000~0xffff。可以直接使用‘字符’或者字符在Unicode表中的位置表示某个字符,这两种表示方式是等价的;
  6. int型数值和char型数值之间可以进行类型转换,int赋值为Unicode表中的排序位置的数值;
  7. Java中还有一些转义字符,转义字符是以反斜线’\’开头,后跟一个或多个字符。转义字符具有特定的含义,不同于字符原有的意义。

8.1 关于char基本数据类型

  1. char型变量可以被赋值成单引号括住的单个字符(字符可以为Unicode表中的任意一个字符);
  2. char型变量可以被赋值成Unicode表中的字符所对应位置下标值;
  3. char型变量可以被赋值成转义字符。

9. 引用数据类型(3种)

  • 引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时候被指定为一个特定的类型,声明之后不能改变。
  • 引用数据类型包括:类(对象)、接口、数组。
  • 所有引用类型默认值都是null.
  • 一个引用变量可以用于引用任何与之兼容的类型。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值