数据类型与变量

1、字面常量

程序运行期间,固定不变的量是常量。
字母常量的分类:

  • 字符串常量:由双引号 “” 括起来的
  • 整形常量:直接写的数字,不带小数点
  • 浮点数常量:直接写的小数
  • 字符常量:由单引号 ‘’ 括起来的单个字符
  • 布尔常量:只有两种 true 和 false
  • 空常量:null,在 Java 中表示“空引用”,即不指向任何对象的引用,因此不能对这个内存进行任何读写操作,一旦尝试读写,就会抛出 NullPointerException 异常。

2、数据类型

Java 中数据类型分为两类:基本数据类型和引用数据类型。

2.1、基本数据类型

基本数据类型分为四类八种:

  • 四类:整型、浮点型、字符型、布尔型
  • 八种:

在这里插入图片描述

注意:

  1. 无论多少位的操作系统,数据类型的字节数都是固定的,比如:在C语言中,16位操作系统下 int 占2个字节,32位操作系统下占4个字节;而在 Java 中,无论是16位还是32位,int 都占4个字节。
  2. 在 Java 中,所有表示数值的数据(整型和浮点型)都是有符号位的,即 Java 中不存在无符号数。
  3. 整型默认是 int 类型,浮点型默认是 double 类型。
  4. 字节是计算机中表示空间大小的基本单位,是计算机中不可再分单位,没有比1个字节更小的存储单位,1字节包含8个比特位,但是在程序中可以申请单个字节的空间,不可以申请单个比特位的空间。其中 1KB = 1024 B, 1MB = 1024 KB, 1GB = 1024 MB。
  5. 基本数据类型的变量空间中存放的是变量的值。

2.2、引用数据类型

引用数据类型不是语言自带的,可以理解为用户自定义的类型,比如:字符串类型。引用数据类型创建的变量,一般称为对象的引用,引用变量不直接存放对象本身,而是存放对象在堆中的起始地址。通过该地址,引用变量即可操作对象。

public static void func() {
	int a = 10;
	int b = 20;
	int[] arr = new int[]{1,2,3};
}

在这里插入图片描述

如上图所示:a 和 b 是基本数据类型,内存空间直接保存值,而 array 是数组类型的引用变量,存储的是对象在堆空间中的起始地址。

3、变量

在程序中,经常改变的量称为变量,而数据类型就是来定义变量的。定义变量的语法格式是:

数据类型 变量名 = 初始值

3.1、整型变量

  • 变量在使用之前要赋初值,否则编译会报错。
  • 在给变量赋初值的时候,不能超过变量的最大值,否则会溢出。
  • int 的包装类型是 Integer
    long 的包装类型是 Long
    short 的包装类型是 Short
    byte 的包装类型是 Byte
  • 整形默认是 int 类型,如果给 long 类型变量赋初值需要在值后加上 L 或者 l,一般推荐加上 L。

3.2、浮点型变量

  • 浮点型变量包括单精度浮点型 float 和双精度浮点型 double。
  • 浮点数默认是 double 类型,如果给 float 类型变量赋初值需要加上 F 或者 f。
  • double 的包装类型是 Double
    float 的包装类型是 Float
  • 在 Java 中,int 除以 int 仍然是 int(舍弃小数部分), 如果需要得到小数,则需定义为浮点型变量。
  • double 类型的内存布局遵守 IEEE 754 标准,尝试使用有限的内存空间表示可能无限的小数,会存在一定的精度误差,因此浮点数是个近似值,并不是精确值。

3.3、字符型变量

  • 字符型的表示方式是单引号+单个字母。
  • char 的包装类型是 Character。
  • 在计算机中字符实际上是一个整数,在C语言中使用 ASCII 表示字符,字符型变量占一个字节;而在 Java 中使用 Unicode 表示字符,因此字符型变量占两个字节,表示的字符种类也会更多,包括中文。

3.4、布尔型变量

  • 布尔型变量用来表示真假,只有两个取值:true 或者 false。
  • 和C语言不同,Java 的 boolean 变量和 int 变量不可以相互转换,即不存在0表示 false,非0表示 true 的说法。
  • boolean 的包装类型是 Boolean

3.5、类型转换

Java 是强类型编程语言,当不同类型的变量相互赋值时会进行严格的校验;当将一个字面值常量进行赋值的时候,Java 会自动针对数字范围进行检查。类型转换分为自动(隐式)类型转换和强制(显示)类型转换。

  • 自动(隐式)类型转换
    当数据范围小的转换为数据范围大的数据时,代码不需要经过任何处理,在编译时编译器会自动进行类型转换。
  • 强制(显示)类型转换
    当数据范围大的转换为数据范围小的数据时,代码需要进行强制转换,否则编译失败。强制转换时可能造成精度丢失,而且强制类型转换不一定可以成功,不相干的类型不可以进行转换。

3.6、类型提升

不同数据类型的数据进行运算时,数据类型小的会被提升为数据类型大的。
注意:由于计算机内存是以4个字节为单位来读写数据,因此为了硬件上实现方便,对于 short、byte类型,会先提升成 int 类型再进行转换。

在这里插入图片描述
正确写法:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值