Day05数据类型
数据类型
1.强类型语言,要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用;
JAVA就是强类型语言
2.弱类型语言。
八大基本数据类型

注意:在表示long类型时,数后面有L
表示float类型时,数后面有F或f
字符单个字,用单引号引用;字符串用双引号引用
整数范围
在 Java 中,long、int、short、byte这几种基本数据类型的范围如下:
-
byte: - 占用内存空间:1 个字节(8 位)。 - 取值范围:-128 到 127。即 -2 的 7 次方到 2 的 7 次方减 1。 -
short: - 占用内存空间:2 个字节(16 位)。 - 取值范围:-32768 到 32767。即 -2 的 15 次方到 2 的 15 次方减 1。 -
int: - 占用内存空间:4 个字节(32 位)。 - 取值范围:-2147483648 到 2147483647。即 -2 的 31 次方到 2 的 31 次方减 1。4.
long: - 占用内存空间:8 个字节(64 位)。 - 取值范围:-9223372036854775808 到 9223372036854775807。即 -2 的 63 次方到 2 的 63 次方减 1。
字节
位 (bit):是计算机内部数据储存的最小单位,11001100 是一个八位二进制数。
字节(byte):是计算机中数据处理的基本单位,习惯上用大写 B 来表示,1B(byte,字节)=8bit(位)。
字符:是指计算机中使用的字母、数字、字和符号。
1bit 表示 1 位;
1Byte 表示一个字节,
1B=8b;1024B =1KB;1024KB=1M;1024M=1G;
整数、浮点数、字符、转义字符拓展
例1:
二进制0b、八进制0、十进制、十六进制0x
int i1=10; //十进制
int i2=0b10; //二进制0b
int i3=010; //八进制0
int i4=0x10; //十六进制0x
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
System.out.println(i4);
例2:浮点数不能用于实际计算!!!!!!!!!!!!!!
不要使用浮点数进行比较!!!!!!!!!!!!!!!!!!!!!!!!!
//浮点数拓展————浮点数不能用于实际计算!!!!!!!!!
//两个奇怪的例子
//example01
float i5=0.1f; //i5=0.1
double i6=1.0/10; //i6=0.1
System.out.println(i5);
System.out.println(i6);
System.out.println(i5==i6); //false
System.out.println("==========================================");
//example02
float i7=2323232323232323232f;
float i8=i7+1;
System.out.println(i7);
System.out.println(i8);
System.out.println(i7==i8);//true
//总结:浮点数表示字节有限的、离散的浮点数存在舍入误差,好多数字没办法精确表达,只能大约表示
//不要使用浮点数进行比较
//不要使用浮点数进行比较
//不要使用浮点数进行比较
拓展:如何进行高精度的浮点数计算?
-
使用
BigDecimal类---------------decimal 十进制的- 基本原理:在Java中,
float和double类型在进行一些高精度计算时可能会出现精度丢失的问题。BigDecimal类可以用来表示任意精度的带符号十进制数,它通过字符串的方式来初始化数值,从而避免了二进制浮点数在转换过程中的精度丢失。 - 示例代码:
import java.math.BigDecimal; public class HighPrecisionCalculation { public static void main(String[] args) { BigDecimal num1 = new BigDecimal("0.1"); BigDecimal num2 = new BigDecimal("0.2"); BigDecimal sum = num1.add(num2); System.out.println(sum); } }-
解释:在上述代码中,首先创建了两个
BigDecimal对象num1和num2,并通过字符串的形式分别初始化它们为0.1和0.2。然后使用add方法来计算它们的和,并将结果存储在sum中。最后输出sum的值,得到准确的0.3,避免了使用float或double类型可能出现的精度丢失问题。 -
BigDecimal与十进制的关联:BigDecimal通过以字符串形式存储数字,并且以十进制运算规则来操作这些数字,确保了高精度的十进制计算。 -
BigDecimal不能用+
-
BigDecimal bigDecimal1 = new BigDecimal("0.2"); BigDecimal bigDecimal2 = new BigDecimal("0.3"); System.out.println(bigDecimal1+bigDecimal2);//报错!!!!!!!!!!!!
- 基本原理:在Java中,
-
注意事项
- 舍入模式:在进行除法等操作时,可能会出现除不尽的情况。
BigDecimal提供了多种舍入模式,例如ROUND_UP(向上舍入)、ROUND_DOWN(向下舍入)、ROUND_HALF_UP(四舍五入)等。
import java.math.BigDecimal; import java.math.RoundingMode; public class DivisionExample { public static void main(String[] args) { BigDecimal dividend = new BigDecimal("1"); BigDecimal divisor = new BigDecimal("3"); BigDecimal quotient = dividend.divide(divisor, 2, RoundingMode.HALF_UP); System.out.println(quotient); } }- 解释:在这个示例中,
divide方法用于计算除法。参数2表示结果的小数位数,RoundingMode.HALF_UP表示采用四舍五入的舍入模式。通过合理选择舍入模式,可以得到符合需求的高精度计算结果。 - 性能考虑:
BigDecimal的操作相对float和double类型来说,性能较低。因为它需要更多的内存和计算资源来处理高精度的数字。所以在对性能要求较高且精度要求不是绝对高的场景下,需要谨慎使用。如果只是一般的科学计算或者精度要求不高的场景,float和double类型可能就足够了。
- 舍入模式:在进行除法等操作时,可能会出现除不尽的情况。
例3:把字符转换为数字
//字符拓展
char i9='a';
char i10='中';
System.out.println(i9);
System.out.println((int)i9); //强制转换,把字符转换为数字
System.out.println(i10);
System.out.println((int)i10); //强制转换,把字符转换为数字
//所有的字符本质还是数字
//在Unicode编码表里;97代表a;20013代表中
char i11='\u0061'; //Unicode 0061码点对应的字符
System.out.println(i11); //a
System.out.println((int)i11);
System.out.println("==========================================");
//转义字符
// \t 制表符 中间隔tab格
System.out.println("Hello\tWorld");
// \n 换行
System.out.println("Hello\nWorld");
System.out.println("==========================================");
注意
-
进制 二进制0b、八进制0、十进制、十六进制0x
-
浮点数不能用于实际计算!!!!!!!!!
-
System.out.println((int)i11);将i11转换为整数形式 -
\t 制表符;\n 换行
-
在Java中,Unicode转义序列
\u后跟四个十六进制数字,用来表示一个Unicode字符。
易错提醒
double i7= 2_323_999_999; //错了!!!!!!!!!!!!!!!!!!!!!!!
当你使用 _ 作为数字中的分隔符时,需要注意的是这个特性只能用于二进制、八进制、十进制和十六进制字面量,而不能用于浮点数(如 float 或 double)。
psvm sout 使用注意事项
psvm sout使用注意事项
只能在psvm里面使用sout

浙公网安备 33010602011771号