java基本数据类型的选择_Java基本数据类型

数据类型

Java是一种强类型语言,这意味着必须为每一个变量声明一种类型。

8种基本类型:4种整型、2种浮点类型、1种用于表示Unicode编码的字符单元的字符类型char和1种表示真值的boolean类型

Java有一个能表示任意精度的算数包,通常称为“大数值”(big number)。但它并不是一种新的Java类型,而是一个Java对象。

除了基本数据类型,其他都是引用数据类型

引用数据类型默认值都是null

八大基本类型:

整型:

用于表示没有小数部分的数值,它允许是负数。

byte和short主要用于特定场合。例如,底层的文件处理或者需要控制占用存储空间量的大数组。

在Java中,整型的范围与运行Java代码的机器无关。这就解决了 软件从一个平台移植到另一个平台带来的很多问题。与此相反,C/C++需要针对不同的处理器选择最为高效的整型,这就可能造成一个在32位处理器上运行很好的C程序在16位系统上运行却发生整数溢出。

由于Java程序必须保证在所有机器上都能得到相同的运行结果,所以各种数据类型的取值范围必须固定。

Java没有任何无符号(unsigned)形式的int、long、short或byte类型

byte:

1字节,8位

取值范围:[-2^7, 2^7-1]=[-128, 127]

默认值0

short:

2字节,16位

取值范围:[-2^15, 2^15-1]=[-32768, 32767]

默认值0

int:

4字节,32位

取值范围:[-2^31, 2^31-1]

默认值0

long:

8字节,64位

取值范围:[-2^63, 2^63-1]

默认值0L

有一个后缀L或者l

浮点型:

用于表示有小数部分的数值

在Java中有2种浮点类型

可以使用十六进制表示浮点数值。

0.125 = 2^-3// 可以表示成0x1.0p-3

// 十六进制中,p表示指数,而不是e

// 尾部采用十六进制,指数采用十进制。指数的基数是2,而不是10

表示溢出和出错情况的三个特殊浮点数值:

1.正无穷大

2.负无穷大

3.NaN(不是一个数字)

// 例如,一个正整数除以0的结果为正无穷大

// 计算0/0或者负数的平方根结果为NaN

float和double类型不能表示精确的值,如货币。

因为float和double超过精度表示范围之后会发生精度缺失的情况。这是因为二进制存储十进制浮点数时,先将整数部分转换成二进制(整数部分除2取模,直到被除数为0),然后将小数部分转成二进制(小数部分2取整数部分,剩余小数部分继续2取整数部分,直到积为1),如果计算过程循环,则说明*2永远无法消灭小数部分。所以二进制只能精确表示2的-n次方的整数倍小数。

System.out.println(2.0-1.1) // 0.8999999999999

// 不是0.9的原因是因为浮点数值采用二进制表示

// 而在二进制中无法精确表示分数1/10

所以货币运算/金融计算/不允许有任何舍入误差的数值计算中一般使用BigDecimal类

float

4字节,32位

有效位数6~7位

默认值0.0f

后缀F或 f,没有后缀的浮点数值默认为double类型

单精度,很少情况下适用float,例如,需要单精度数据的库或者需要存储大量数据

double

8字节,64位

有效位数15位

默认值0.0d

双精度(数值精度是float的两倍),绝大部分程序都采用double

boolean

只有两个取值:true 和 false;默认是false

整型值和布尔值不能相互转换

C++中,数值/指针可以代替boolean值。值0相当于false,非0值相当于true。但是Java中不可以这样。

char

原本用于表示单个字符,现在有些Unicode字符也可以用一个char值描述,另一些Unicode字符需要2个char值

char类型的值可以表示为十六进制值

单一的16位Unicode字符

范围:[\u0000, \uffff]=[0, 65535]

可以存储任何字符

Unicode转义序列会在解析代码之前得到处理。要小心注释中的\u

不建议使用char类型

// 例如,"\u0022+\u0022" 其实是一个空串

// 因为 \u0022会在解析之前转换为 "

// 最后得到 "" + "" 的空串

面试题

Java支持的数据类型有哪些?什么是自动拆装箱?

(1)Java语言支持的8种基本数据类型是:

byte

short

int

long

float

double

boolean

char

(2)自动装箱是Java编译器在基本数据类型和对应的对象包装类型之间做的一个转化。比如:把int转化成Integer,double转化成Double,等等。反之就是自动拆箱。

Java支持的数据类型包括两种:

一种是基本数据类型,包含byte,char,short, boolean ,int , long, float,double;

另一种是引用类型:如String等,其实是对象的引用,JVM中虚拟栈中存的是对象的地址,创建的对象实质在堆中,通过地址来找到堆中的对象的过程,即为引用类型。

自动装箱就是Java编译器在基本数据类型和对应的对象包装类型间的转化,即int转化为Integer,自动拆箱是Integer调用其方法将其转化为int的过程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值