Day05数据类型

数据类型

1.强类型语言,要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用;

​ JAVA就是强类型语言

2.弱类型语言。

八大基本数据类型

image-20240930210644375

数据类型

1

注意:在表示long类型时,数后面有L

表示float类型时,数后面有F或f

字符单个字,用单引号引用;字符串用双引号引用

整数范围

在 Java 中,longintshortbyte这几种基本数据类型的范围如下:

  1. byte: - 占用内存空间:1 个字节(8 位)。 - 取值范围:-128 到 127。即 -2 的 7 次方到 2 的 7 次方减 1。

  2. short: - 占用内存空间:2 个字节(16 位)。 - 取值范围:-32768 到 32767。即 -2 的 15 次方到 2 的 15 次方减 1。

  3. 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
        //总结:浮点数表示字节有限的、离散的浮点数存在舍入误差,好多数字没办法精确表达,只能大约表示
        //不要使用浮点数进行比较
        //不要使用浮点数进行比较
        //不要使用浮点数进行比较

拓展:如何进行高精度的浮点数计算?

  1. 使用BigDecimal---------------decimal 十进制的

    • 基本原理:在Java中,floatdouble类型在进行一些高精度计算时可能会出现精度丢失的问题。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对象num1num2,并通过字符串的形式分别初始化它们为0.10.2。然后使用add方法来计算它们的和,并将结果存储在sum中。最后输出sum的值,得到准确的0.3,避免了使用floatdouble类型可能出现的精度丢失问题。

    • BigDecimal与十进制的关联BigDecimal通过以字符串形式存储数字,并且以十进制运算规则来操作这些数字,确保了高精度的十进制计算。

    • BigDecimal不能用+

    •  BigDecimal bigDecimal1 = new BigDecimal("0.2");
              BigDecimal bigDecimal2 = new BigDecimal("0.3");
              System.out.println(bigDecimal1+bigDecimal2);//报错!!!!!!!!!!!!
      
      
  2. 注意事项

    • 舍入模式:在进行除法等操作时,可能会出现除不尽的情况。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的操作相对floatdouble类型来说,性能较低。因为它需要更多的内存和计算资源来处理高精度的数字。所以在对性能要求较高且精度要求不是绝对高的场景下,需要谨慎使用。如果只是一般的科学计算或者精度要求不高的场景,floatdouble类型可能就足够了。

例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;         //错了!!!!!!!!!!!!!!!!!!!!!!!

当你使用 _ 作为数字中的分隔符时,需要注意的是这个特性只能用于二进制、八进制、十进制和十六进制字面量,而不能用于浮点数(如 floatdouble)。

psvm sout 使用注意事项

psvm   sout使用注意事项
只能在psvm里面使用sout
posted @ 2024-10-01 16:36  1hahahahahahahaha  阅读(15)  评论(0)    收藏  举报