zoukankan      html  css  js  c++  java
  • 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 字符;

  • 相关阅读:
    JAVA规则引擎 -- Drools
    Spring多数据源的配置和使用
    nginx反向代理与正向代理的区别
    优化你的java代码性能
    java 代码优化
    java常用的设计模式
    Java中的异常处理从概念到实例
    详解JVM工作原理和特点
    mysql性能优化-慢查询分析、优化索引和配置
    外网不能访问部署在虚机的NodeJs网站(80端口)
  • 原文地址:https://www.cnblogs.com/nayitian/p/14894707.html
Copyright © 2011-2022 走看看