【115天】尚学堂高琪Java300集视频精华(7-8)
第7集:基本数据类型、整数类型、进制转换、编程中的L问题
基本数据类型
Java是强类型语言,每个变量都必须声明其类型。
Java数据类型分两大类:基本数据类型(primitive data type)和引用数据类型(reference data type)
-
Java定义了3类8种基本数据类型
逻辑型——boolean
文本型——char
数值型——byte、short、int、long、float、double
-
Java引用数据类型的大小统一为4个字节,记录的是其引用对象地址。
整数类型
-
整数用于表示没有小数点的数,它可以是负数。
-
Java整型常量三种表示形式:
十进制
八进制:0开头
十六进制:0x或者0X开头
-
【拓展】区分整型变量和整型常量
int a = 3;//a是整型变量,3是整型常量。 byte b = 3;//b是整型变量,3是整型常量。
编程中的L问题
-
Java语言的整型常量默认为int型,声明long型常量可以后加‘ l ’或‘ L ’ ,如:
long a = 55555555;//不出错,在int表示的范围内(21亿内)。 long b = 55555555555;//不加l出错,已经超过int表示的范围。报错。
L问题:小写L容易与1混淆,尽量用大写。
BigInteger、BigDecimal可分别用来算超出long、double的数。
转换二进制——Integer.toBinaryString(a);
十进制——Integer.parseInt(a);
八进制——Integer.toOctalString(a);
-
十六进制的方法——Integer.toHexString(a);
package com.test007; public class TestDataType { public static void main(String[] args){ int a = 10; int a2 = 010; int a3 = 0xf; //byte b =200;// 报错:Type mismatch:cannot convert from int to byte System.out.println(a); System.out.println(a2); System.out.println(a3); System.out.println(Integer.toBinaryString(a)); System.out.println(Integer.toOctalString(a)); System.out.println(Integer.toHexString(a)); int a5 = 10; long a6 = 200; byte b2 = 100;//如果数据的大小没有超过byte/short/char的表述范围,则可以自动转型。 long a7 = 11132311111L; long l = 3; long l2 = l+3; //L问题 } }
第8集:浮点数、浮点数误差问题
浮点数
float类型又被称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求。
double表示这种类型的数值精度是float类型的两倍,又被称作双精度,绝大部分应用程序都采用double类型。
-
Java 浮点类型常量有两种表示形式:
十进制数形式,例如: 3.14 314.0 0.314 科学记数法形式,如 314e2 314E2 314E-2 double f = 314e2; //314*10^2-->31400.0 double f2 = 314e-2; //314*10^(-2)-->3.14
-
Float类型的数值有一个后缀F/f ,没有后缀F/f的浮点数值默认为double类型。也可以在浮点数值后添加后缀D/d, 以明确其为double类型:
【拓展】数值型中byte、short、double、int声明时不用加后缀,不超过值范围即可,float和long需要。参考资料
浮点数误差问题
浮点类型float, double的数据不适合在不容许舍入误差的金融计算领域。
-
如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。
由于字长有限,浮点数能够精确表示的数是有限的,因而也是离散的。浮点数一般都存在舍入误差,很多数字无法精确表示(例如0.1),其结果只能是接近, 但不等于。
二进制浮点数不能精确的表示0.1,0.01,0.001这样10的负次幂。并不是所有的小数都能可以精确的用二进制浮点数表示。
-
最好完全避免使用浮点数比较:
float f = 0.1f; double d = 1.0/10; System.out.println(f==d); //false float d1 = 423432423f; float d2 = d1+1; if(d1==d2){ System.out.println("d1==d2"); }else{ System.out.println("d1!=d2"); } //输出结果为d1==d2,明显错误。
-
大数值:Java.math下面的两个有用的类:BigInteger和BigDecimal,这两个类可以处理任意长度的数值。BigInteger实现了任意精度的整数运算。BigDecimal实现了任意精度的浮点运算。
package test008; public class test008 { public static void main(String[] args){ double a = 3.14; float b = 3.14F;//这个要加F,否则报错 byte c = 3; short d = 3; int e = 3; long f = 3; long g = 3333333333333L;//这个要加L,否则报错 double a2 = 314e-2; System.out.println(a2); float b2 = 0.1f; double a3 = 1.0/10; System.out.println(b2); System.out.println(a3); System.out.println(b2==a3);//false; //输出结果:b2、a3均为0.1,但是b2不等于a3。 } }
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。