Java数据类型,基本,引用,整型,浮点

Java两种数据类型

  • 基本数据类型
    基本数据类型都是直接存储在栈中,数据本身的值就是存储在栈空间里面,而Java语言里面八种数据类型是这种存储模型。
  • 引用数据类型
    继承于Object类,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,“引用”是存储在有序的内存栈上的,而对象本身的值存储在内存堆上的;

不论是基本数据类型还是引用类型,他们都会先在栈中分配一块内存,对于基本类型来说,这块区域包含的是基本类型的内容;而对于对象类型来说,这块区域包含的是指向真正内容的指针,真正的内容被手动的分配在堆上。

八大基本数据类型介绍

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型

byte:

  • 一个字节,8位,有符号
  • 最小值 -128(-2^7)
  • 最大值 127(2^7-1)
  • 默认值 0
  • 例子:byte a = 100,byte b = -50。

short

  • 2个字节,16位,有符号
  • 最小值 -32768(-2^15)
  • 最大值 32767(2^15 - 1)
  • 默认值 0
  • 例子:short s = 1000,short r = -20000。

int

  • 4个字节,32位,有符号
  • 最小值 -2,147,483,648(-2^31)
  • 最大值 2,147,483,647(2^31 - 1)
  • 默认值 0
  • 例子:int a = 100000, int b = -200000

long

  • 8个字节,64位,有符号
  • 最小值 -9,223,372,036,854,775,808(-2^63)
  • 最大值 9,223,372,036,854,775,807(2^63 -1)
  • 默认值 0L
  • 例子: long a = 100000L,Long b = -200000L

" L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写

float

  • 4个字节,32位,单精度,符合IEEE 754标准的浮点数
  • 最小值 0.0000000000000000000000000000000000000000000014(1.4E-45 )
  • 最大值 340,282,350,000,000,000,000,000,000,000,000,000,000(3.4028235E38)
  • 默认值是 0.0f
  • 浮点数不能用来表示精确的值,如货币
  • 例子:float f1 = 234.5f

double

  • 8个字节,64位,符合IEEE 754标准的浮点数
  • 最小值 4.9E-324,这个值太小了
  • 最大值 1.7976931348623157E308,这个值太大了
  • 默认值 0.0d
  • 例子:double d1 = 123.4

1.45e-15是一个正数,是在正数范围内的最小数,也就是最接近于0的正数。所以MIN_VALUE并不是取值范围的最小数,而是正数范围的最小数。e后面的负数表示小数点的位置,不是数字的正负


注意:整型默认值是 int,浮点型默认值是double


boolean

  • 1位
  • 只有两个取值:true 和 false
  • 默认值是 false
  • 例子:boolean flag= true

char

  • 2个字节,16位,单一的Unicode 字符
  • 最小值 \u0000(即为0)
  • 最大值是 \uffff(即为65,535)
  • char 数据类型可以储存任何字符
  • 例子:char letter = ‘A’

实际上,JAVA中还存在另外一种基本类型void,它也有对应的包装类 java.lang.Void,不过我们无法直接对它们进行操作


引用数据类型介绍

  • 在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。变量一旦声明后,类型就不能被改变了
  • 对象、数组都是引用数据类型
  • 所有引用类型的默认值都是null
  • 一个引用变量可以用来引用任何与之兼容的类型
  • 例子:Site site = new Site(“Runoob”)

Java常量

  • 被final修饰
  • 一旦声明,就不能改变
  • 常量名通常使用大写字母表示,用“_”分割
  • 例如:final double MAX_SIZE = 9.68

注:Java中Integer和String比较特殊


数据类型表示

10进制,8进制,16进制

  • byte、int、long、和short都可以用十进制、16进制以及8进制的方式来表示
  • 当使用常量的时候,前缀 0 表示 8 进制,而前缀 0x 代表 16 进制,
int decimal = 100; // 10进制
int octal = 0144; // 8进制
int hexa =  0x64; //16进制

字符串常量和字符常量都可以包含任何Unicode字符

char a = '\u0001';
String a = "\u0001";

Java语言支持一些特殊的转义字符序列

符号字符含义
\n换行 (0x0a)
\r回车 (0x0d)
\f换页符(0x0c)
\b退格 (0x08)
\0空字符 (0x20)
\s字符串
\t制表符
"双引号
单引号
\反斜杠
\ddd八进制字符 (ddd)
\uxxxx16进制Unicode字符 (xxxx)

为什么 long 和 double 都是64位,范围却相差甚远

从范围来看double和long完全不是一个级别的了吧?long最大 2^63-1 ,而double值为 2^1024 ,差太远了,为什么呢?

double是n*2^m(n乘以2的m次方)这种形式存储的,只需要记录n和m两个数就行了,m的值影响范围大,所以表示的范围比long大。但是m越大,n的精度就越小,所以double并不能把它所表示的范围里的所有数都能精确表示出来,而long就可以。

  • 首先浮点类型分单精度float和双精度double
  • 而他们的底层存储结构不同:他们是由符号位,指数位,尾数位组成
  • 符号域:符号域占1位,0表示正数,1表示负数
  • 指数域:指数域共有8位,为能处理负指数,实际指数位存储在指数域中值减去一个偏移量,单精度浮点数的偏移量为127,故实际可表达的指数值的范围为-127~128
  • 尾数域:尾数域共有23位,由于规范浮点数的小数点左侧必须为1,所以在保存尾数时,可以省略小数点前面这个1,从而腾出一个二进制位来保存更多的尾数
  • 举例:比如对于单精度数而言,二进制的1001.101(对应于十进制的9.625)可以表达为1.001101 ×2^3,所以实际保存在尾数域中的
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值