java数字类型_Java数据类型

Java是一种强类型语言,每个变量都必须声明其类型。

1) Java的数据类型分为两大类:基本类型和引用类型

整数型(byte,short,int,long)

大家来看一个图:

20200514012638194909.png

1) 举例一个byte其它以此类推:

byte 是一个字节保存的,有8个位,即8个0、1。

8 位的第一个位是符号位, 也就是说 0000 0001 代表的是数字1

1000 0000 代表的就是-1,所以正数最大位 0111 1111,也就是数字127

负数最大为 1111 1111,也就是数字-128,所以 Java 中的一个 byte 是 1 个字节,其范围是-128~127

2) Java 语言整型常数的三种表示形式:

十进制整数,如:100, -500, 0。

八进制整数,要求以 0 开头,如:011。

十六进制数,要求 0x 或 0X 开头,如:0x15 。

Java语言的整型常数默认为int型,声明long型常量可以后加‘ l ’或‘L ’ ,如:

long a = 10000000; //不出错,在Int表示的范围内(21亿内)。

long b = 10000000000;//必须要加10000000000L,要不然就会报错错误: 过大的整数: 10000000000

浮点型

20200514012638363861.png

float类型又被称作单精度类型,尾数可以精确到 7 位有效数字,在很多情况下,float 类型的精度很难满足需求。

double 表示这种类型的数值精度是 float 类型的两倍,又被称作双精度,绝大部分应用程序都采用 double 类型。

Java 浮点类型常量有两种表示形式

十进制数形式,例如:

3.14 314.0 0.314

科学记数法形式,如

314e2 314E2 314E-2

Float类型的数值有一个后缀F/f,没有后缀F/f的浮点数值默认为double类型。也可以在浮点数值后添加后缀D/d, 以明确其为double类型。

浮点类型float, double的数据不适合在计算或者比较中使用,因为会丢失精度。如果需要精确数字计算,需要使用BigDecimal类。

主要理由:由于字长有限,浮点数能够精确表示的数是有限的,因而也是离散的。浮点数一般都存在舍入误差,很多数字无法精确表示(例如0.1),其结果只能是接近, 但不等于。

BigDecimal类

java.math.BigDecimal

BigDecimal构造方法

1.public BigDecimal(double val)    将double表示形式转换为BigDecimal *不建议使用

2.public BigDecimal(int val)将int表示形式转换成BigDecimal

3.public BigDecimal(String val)将String表示形式转换成BigDecimal

为什么不建议采用第一种构造方法呢?来看例子

public static void main(String[] args)

{

BigDecimal bigDecimal = new BigDecimal(2);

BigDecimal bDouble = new BigDecimal(2.3);

BigDecimal bString = new BigDecimal("2.3");

System.out.println("bigDecimal=" + bigDecimal);

System.out.println("bDouble=" + bDouble);

System.out.println("bString=" + bString);

}

运行结果如下

20200514012638416597.png

为什么会出现这种情况呢?

JDK的描述:1、参数类型为double的构造方法的结果有一定的不可预知性。有人可能认为在Java中写入newBigDecimal(0.1)所创建的BigDecimal正好等于 0.1(非标度值 1,其标度为 1),但是它实际上等于0.1000000000000000055511151231257827021181583404541015625。这是因为0.1无法准确地表示为 double(或者说对于该情况,不能表示为任何有限长度的二进制小数)。这样,传入到构造方法的值不会正好等于 0.1(虽然表面上等于该值)。

2、另一方面,String 构造方法是完全可预知的:写入 newBigDecimal("0.1") 将创建一个 BigDecimal,它正好等于预期的 0.1。因此,比较而言,通常建议优先使用String构造方法。

当double必须用作BigDecimal的源时,请使用Double.toString(double)转成String,然后使用String构造方法,或使用BigDecimal的静态方法valueOf,如下

public static void main(String[] args)

{

BigDecimal bDouble1 = BigDecimal.valueOf(2.3);

BigDecimal bDouble2 = new BigDecimal(Double.toString(2.3));

System.out.println("bDouble1=" + bDouble1);

System.out.println("bDouble2=" + bDouble2);

}

结果如下

20200514012638475193.png

总结

(1)商业计算使用BigDecimal。

(2)尽量使用参数类型为String的构造函数。

(3) BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以在做加减乘除运算时千万要保存操作后的值。

(4)我们往往容易忽略JDK底层的一些实现细节,导致出现错误,需要多加注意。

Char类型

Char 是字符类型(单个字符)占2个字节16位。

单引号用来表示字符常量。例如‘A’是一个字符,它与“A”是不同的,“A”表示含有一个字符的字符串。

char 类型用来表示在 Unicode 编码表中的字符。

Unicode 编码被设计用来处理各种语言的所有文字,它占2个字节,可允许有65536个字符;ASCII码占1个字节,可允许有128个字符,是Unicode编码表中前128个字符。例如:

char eChar = ‘a‘;

char cChar =‘中‘;

Unicode具有从0到65535之间的编码,他们通常用从’\u0000’到’\uFFFF’之间的十六进制值来表示(前缀为u表示Unicode)

char c = ‘\u0061’;

Java 语言中还允许使用转义字符 ‘\’ 来将其后的字符转变为其它的含义,

char c2 = ‘\n‘;  //代表换行符

char运算

Char 类型是可以运算的因为 char 在 ASCII 等字符编码表中有对应的数值。

在 JAVA 中,对 char 类型字符运行时,直接当做 ASCII 表对应的整数来对待

char a = ‘a‘;

int b = 2;

int c = a+b;

System.out.println(c);//答案是99

Boolean类型

boolean类型一位,不是一个字节,boolean类型有两个值,true和false,不可以 0 或非 0 的整数替代 true 和 false ,这点和C语言不同。

总结:

用单引号‘‘标识,只能放单个字符。

char+char,char+int——类型均提升为int,附值char变量后,输出字符编码表中对应的字符。

boolean类型一位,不是一个字节boolean类型有两个值,true和false,不可以 0 或非 0 的整数替代 true 和 false ,这点和C语言不同。

boolean bool = true;//或者boolean bool = false;

boolean 类型用来判断逻辑条件,一般用于if、while、do while。boolean sex = false;

案例一

if(sex==true){System.out.println("你是男的");}

else{System.out.println("你是女的");}

案例二

while(sex){

...}

案例三

do{

}while(sex)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值