Java重温学习笔记,基本数据类型

一、 float/double类型对后缀大小写不敏感。如: 

float f1 = 234.5f;
float f2 = 234.5F;

效果等同。

double d1 = 7.;
double d2 = 7.d;
double d3 = 7.0D;

效果等同。

二、long类型,如果赋值时数据过大,必须加后缀L(建议养成习惯)。不加后缀默认按整型处理,易报错。

如:

long g1 = 9223372036854775807;
long g2 = (long)9223372036854775807;

编译时都会报错:错误: 过大的整数: 9223372036854775807

正确方式为:

long g1 = 9223372036854775807L;
long g2 = 9223372036854775807l;

三、IntegerCache缓存的问题

    public static void main(String[] myarg) {
        Integer i1 = 5678;
        Integer i2 = 5678;
        
        System.out.println(i1==i2);
    
        Integer i3 = 101;
        Integer i4 = 101;
        
        System.out.println(i3==i4);
    }

上面这段代码的输出是:

false
true

原因参考IntegerCache类的实现代码:

public static Integer valueOf(int i) {
    assert IntegerCache.high >= 127;
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

从上面可以看出, i >= -128 && i <= 127 时,Integer.valueOf(i) 会将 i 存储在内部类 IntegerCache的static final Integer cache[]里,这一字节的缓存内存地址是静态的。

注意:如果Integer不是通过自动装箱赋值,而通过new关键字赋值,则结果又不同。如:

public class MyDemo {
   public static void main(String args[]){
        Integer i1 = 100;
        Integer j1 = 100;
        System.out.print(i1 == j1); //true

        Integer i2 = new Integer(100);
        Integer j2 = new Integer(100);
        System.out.print(i2 == j2); //false
   }
}

四、char与byte的区别

byte 是字节数据类型,是有符号型的,占1 个字节,大小范围为:-128—127 。char 是字符数据类型 是无符号型的,占2字节(Unicode码 ),大小范围 为:0—65535。char是一个16位二进制的Unicode字符,Java用char来表示一个字符 。

    public static void main(String[] myarg) {
        char c1 = (char) -9; // char不能识别负数,必须强制转换,否则报错。
        System.out.println(c1); // 注意:即使强制转换之后,也无法识别,显示为?号。
        
        char c2 = 'B';
        char c3 = '民';
        byte b1 = (byte)c2;    // 必须强制转换否则报错
        byte b2 = (byte)c3;    // 必须强制转换否则报错
        System.out.println(b1);
        System.out.println(b2);
    }

 五、顺带补充八种基本数据类型的基本知识

byte 数据类型是8位、有符号的,以二进制补码表示的整数;

short 数据类型是 16 位、有符号的以二进制补码表示的整数

int 数据类型是32位、有符号的以二进制补码表示的整数;

long 数据类型是 64 位、有符号的以二进制补码表示的整数;

float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;

double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数;

boolean数据类型表示一位的信息;

char类型是一个单一的 16 位 Unicode 字符;

posted @ 2021-06-18 11:35  那些年的事儿  阅读(63)  评论(0编辑  收藏  举报