1-3 数据类型

前言

变量就是申请内存来存储值也就是说,当创建变量的时候,需要在内存中申请空间。

内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。

因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。

java两大数据类型

  1. 基本数据类型(又叫内置类型或类型
  2. 引用类型,默认值null(空值)

1 基本数据类型

整数类型

浮点型

字符型

布尔型

byte

boolean

short

char

int

float

long

double

1.1 byte

  1. 一个byte类型在内存中占用8位二进制,即 1byte = 8bit;
  2. 有正负号
  3. 最小值 -128(-27
  4. 最大值 127(27-1
  5. 默认值 0
  6. 应用:byte类型用在大型数组中节约空间,主要代替int类型,因为byte类型的变量占用的内存空间只有int类型的四分之一
  7. 示例: byte no = 12;

bit、byte与字节(Byte)关系

bit比特,表示一位二进制位

byte是java语言的基本数据类型 1byte = 8bit

Byte字节,是计算存储空间大小的单位,简称B;1字节 = 8bit,其他还有千字节KB,兆字节MB,千兆字节GB

1.2 short

  1. 内存占用16位
  2. 有正负号
  3. 最小值 -32768(-215
  4. 最大值 32767(215 - 1
  5. 默认值 0
  6. 应用:Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一
  7. 示例: short no = 12;

1.3 int

  1. 内存占用32位
  2. 有正负号
  3. 最小值 -2,147,483,648(-2^31)
  4. 最大值 2,147,483,647(2^31 - 1)
  5. 默认值 0
  6. 应用:一般地整型变量默认为 int 类型
  7. 示例: int no = 12;

1.4 long

  1. 内存占用64位
  2. 有正负号
  3. 最小值 -9,223,372,036,854,775,808(-2^63)
  4. 最大值 9,223,372,036,854,775,807(2^63 -1)
  5. 默认值 0L
  6. 应用:这种类型主要使用在需要比较大整数的系统上
  7. 示例: long no = 12000000L;"L"理论上不分大小写,但是若写成小写"l"容易与数字"1"混淆,不容易分辩所以最好大写

1.5 float

  1. float数据类型是单精度,32位符合IEEE754标准的浮点数;
  2. 最小值 1.17549435E-38f = 1. 17549435*(10^-38)
  3. 最大值 3.4028235e+38f
  4. 默认值 0.0f 
  5. 示例:float no = 12.123f;

1.6 double

  1. double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数
  2. 最小值 2.2250738585072014E-308
  3. 最大值 1.7976931348623157e+308
  4. 默认值 0.0d
  5. 示例double no = 12.123d; double no2 = 12.1234;

解释:单精度和双精度的概念和区别

单精度和双精度精确的范围不一样,单精度,也即float,一般在计算机中存储占用4字节,也就是32位,有效位数为7位;双精度(double)在计算机中存储占用8字节,64位,有效位数为16位。

单精度浮点型(float )专指占用32位存储空间的单精度(single-precision )值。单精度在一些处理器上比双精度更快而且只占用双精度一半的空间,但是当值很大或很小的时候,它将变得不精确。当你需要小数部分并且对精度的要求不高时,单精度浮点型的变量是有用的。例如,当表示美元和分时,单精度浮点型是有用的。

双精度型,正如它的关键字“double ”表示的,占用64位的存储空间。在一些现代的被优化用来进行高速数学计算的处理器上双精度型实际上比单精度的快。所有超出人类经验的数学函数,如sin( ),cos( ) ,和sqrt( )均返回双精度的值。当你需要保持多次反复迭代的计算的精确性时,或在操作值很大的数字时,双精度型是最好的选择。

1.7 char

  1. char类型是一个单一的 16 位 Unicode 字符
  2. 最小值 '\u0000'(即0)
  3. 最大值 '\uFFFF'(即65535)
  4. 作用char数据类型可以储存任何字符
  5. 示例char no = 'a'; char类型赋值,必须要用单引号’’

1.8 boolean

  1. boolean数据类型表示1位的信息
  2. 只有两个取值:true 和 false 
  3. 默认值是 false
  4. 例子:boolean tar = true;

1.9 自动类型转换

根据精度的由低到高排序为:

byte -> short,char -> int -> long -> float ->double

根据上面顺序,低精度数据类型的变量可以自动地转为高精度类型的变量,如:

byte a = 12;

int b = a;

数据类型转换规则:

  1. 不能对boolean类型进行类型转换;
  2. 高精度类型转换为低精度类型时必须使用强制类型转换换过程中导致溢出或损失精度
  3. 浮点数到整数的转换舍弃小数部分,而不是四舍五入

2.0 强制类型转换

强制类型转换只发生在高精度类型转为低精度类型的情况下,必须显式的在变量前声明要转换的数据类型,且会损失数据精度,如:

float a = 12.23f;

int b = (int) a;

System.out.println(b);//控制台打印12

2 引用类型

引用类型包括三部分:对象名,对象的引用,对象

示例:User user = new User();

栈中保存的是:user = 对象的引用,即对象名和对象的内存地址

堆中保存的是:new User();,即对象本身

注意:所有引用类型的默认值都是null。

3 数据类型在内存中的空间分配

基本数据类型只有一块存储空间(分配在栈stack中);

引用类型有两块存储空间(一块在栈stack中,一块在堆heap中);

对于引用类型的对象,对象名和对象的引用放在栈stak中,对象放在堆heap中;引用 就是指向对象在堆heap中的地址

java的内存模型中保存数据的有两部分: 堆(heap) 和 栈(stack) 。

1.基本类型的变量放在栈里;

2.引用类型中,对象本身放在堆里,对象的引用放在栈里

 

二 常见笔试题

1 byte a = 1; byte b = a + 1;

解析: 错误,因为1的默认数据类型int,而int类型的精度比byte高,高精度类型不能向低精度类型转换,所以错误。

2 short a = 1; a += 1;

解析:正确,+= 左右两边类型不同是会自动强制转换+号不会进行强制类型转换;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值