Java数据类型

Java数据类型

定义

java语言是强类型语言,对于每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间

基本数据类型

java中包含8个基本数据类型:

boolean、byte、char、short、int、float、double、long

分类

数值型
  • 整数类型

    • byte
    • short
    • int
    • long
  • 浮点类型

    • float

      • 存储结构:32位,符号位S__指数位E_尾数位M
    • double

      • 存储结构:64位,符号位S__指数位E_尾数位M
字符型
  • char
布尔型
  • boolean

    计算机存储单元

  • 位(bit):二进制数中的一个数位,可以是0或者1,是计算机中数据的最小单位。二进制的一个“0”或一个“1”叫一位。
  • 字节(Byte,B):计算机中数据的基本单位,每8位组成一个字节。各种信息在计算机中存储、处理至少需要一个字节。
  • 常用存储单元关系
    • 1B=8b
    • 1KB =1024B
    • 1MB=1024KB
    • 1GB=1024MB
    • 1TB=1024GB

基本数据类型图

类型类型名称关键字占用内存取值范围默认值
整型字节型byte1B-128(-27)~127(27-1)0
整型短整型short2B-32768(-215)~32767(215-1)0
整型整型int4B-231~231-10
整型长整型long8B-263~263-10L
浮点型单精度浮点型float4B-3.4E38~3.4E380.0F
浮点型双精度浮点型double8B-1.7E308~1.7E3080.0D
字符型字符型char2B表示一个字符,如(‘a’,‘A’,‘我’)‘\U0000’
布尔型布尔型boolean1B只有两个值,true或falesfalse

float、double的内存存储格式

float类型数字在计算机中用4个字节存储。遵循IEEE-754格式标准:

SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM

S表示浮点数正负
E指数 加上127后的值得二进制数据
M底数

类型符号位指数位数长度
float182332
double1115264

示例

17.625在内存中的存储为:

首先要把17.625换算成二进制:10001.101。

整数部分:除以2,直到商为0,余数反转。(即:模2取余法)

17 % 2 = 8 —> 1 低位

8 % 2 = 4 —> 0

4 % 2 = 2 —> 0

2 % 2 = 1 —> 0

1 % 2 = 0 —> 1 高位

小数部分:乘以2,直到乘位为0,进位顺序取。(即:乘2取整法)

按如下算法进行:

1)首先给小数部分乘2,得到的数,如果小数点前为1;则计1,为0,则计0。

2)再对剩下的小数部分乘2,再计出1或0。

3)重复以上步骤,直至达到需要的精度。

0.625 x 2 = 1.25 —> 1 -1位

0.25 x 2 = 0.5 —> 0 -2位

0.5 x 2 = 1.0 —> 1 -3位

0.0 x 2 = 0.0 —> 0 -4位

以上得到17.625换算成二进制为10001.101。

再将10001.101右移,直到小数点前只剩1位,1.0001101 * 24 ,右移动了四位。

此时,底数和指数就出来了。

底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为:0001101

指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011

符号:因为是正数,所以是0

综上所述,17.625在内存中的存储格式是:01000001 10001101 00000000 00000000

数据类型转化

定义

  • 数据类型的转化是在赋值的数据类型和变量声明的数据类型不一致时发生的,它需要把数据从一个数据类型转换为另一种数据类型

分类

隐式转换(自动类型转换)
  • 定义

    • 低级类型数据可以自动转换为高级类型数据
  • 转换规则

    • 数值型数据转换:byte–>short/char–>int–>long–>float–>double
  • 运算时的类型转换

    • 1、不同类型先转换成同一类型再计算

    • 2、转换按长度从小转到大的放心进行,保证精度不丢失

    • 3、 java默认整型为int,char、byte、short运算时,默认先转换成int型进行计算

    • 4、java默认浮点型为double,若要定义float型浮点数需要在后面加f/F

      		byte b = 3; /*编译通过,虽然3默认是Int类型,但是常量直接赋值给byte时,系统内部会自动作一个判断,只要在byte范围内就可以*/
      		short s = 3000; /*编译通过,同上*/
      		long l = 4; /*编译通过,同上,但一般也成long l=4l*/
      		long la = 101000001010; /*编译不通过,101000001010超出int取值范围,系统不会自动将它当作double类型处理*/
      		long lb = 101000001010l; /*编译通过,101000001010后面加l,手动将其指定为long类型*/
      		float f = 2.3; /*编译不通过,因为2.3默认是double型变量,不能赋给float型变量,在范围内也不行*/
      		float f1 = 2.3f; /*编译通过,因为2.3f指定了2.3是float型变量*/
      		double d = 34.56; /*编译通过*/
      		b = b + 2; /*编译不通过,因为2是Int型,b也自动提升成int型进行运算,得到的结果还是int型的;因为b是变量,这时系统内部就无法判断运算结果是否在byte范围内,因此不能再赋给byte变量*/
      		b = (byte) (b + 2); /*编译通过,但注意不能写成b=(byte)b+2,不起作用*/
      		char c = '你'; /*编译通过,一个char类型变量占2个字节,一个汉字也是占2个字节*/
      		System.out.println('a' + 1); /*ASCII码表中有'a'与数字的对应,和1运算时,类型就会提升为int,将ASCII表中'a'对应的数字体现出来,打印98*/
      		System.out.println('a'); /*单独打印'a'时是显示字符效果*/
      
显示转换(强制类型转换)
  • 不同类型间数据可以手动进行强制类型转换,转换语法:目标类型 变量名=(目标类型)(被转换的数据)
包装类过度类型转换
数据类型封装类
booleanBoolean
byteByte
charCharacter
shortShort
intInteger
longLong
floatFloat
doubleDouble

引用数据类型

  • 接口
  • 数组
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值