• oo_project_2java数据类型范围及测试


    数据类型范围测试

    一、数字常数的编译问题

    java中的常量数字默认以int型编译

    如:

    long a = 1234567890; //十位
    long b = 12345678900; //默认数据为int型,十一位超int范围,编译不过,在eclipse下数字有下划线提醒

    如果用到的数超过int型,这里提供一下几种解决方法

    1.整数后面加L或者l

    long c = 12345678900L; //加L或者l表示以long编译

    2.写成浮点数形式(double表示的范围更广)

    在java中,直接写整数常数,被默认为int型,整数后面加L可以转化成long型。

    直接写浮点常数,被默认为double型,整数后面加f可以转化成float型。

    double e = 12345678900.0; //以double形式写数字常量,编译可过

    二、unsigned int的处理方法

    java没有unsigned int类型,笔者使用了移位的方法表示了无符号整型的最大值

    private static final long UNSIGNED_INT_MAX = (1L << 32) - 1;

    顺便一提,可以用这种方法定义常量字符,代替C语言的宏定义。

    基本数据类型介绍

    基本数据类型主要有这几个: 
    byte、short、int、long、float、double、char、boolean 
    可以分为三类:

    1. 数值类型:byte、short、int、long、float、double
    2. 字符类型:char
    3. 布尔型:boolean

    byte

    1. byte是8位的数据类型,占用1个字节(8bit),默认值是0,它的取值范围是(-2^7) ~ (2^7-1),也就是 -128 ~ 127之间,所以最大存储数据量是255;
    2. byte一般在大型数组中使用,来代替整数,因为byte变量占用的空间只有int的1/4。
    3. byte使用示例: byte a = 10,byte=-10。在使用byte数据类型的时候需要注意取值范围!!!

    short

    1. short是16位的数据类型,占用2个字节,默认值是0,它的取值范围是(-2^15) ~(2^15-1),也就是 -32768 ~ 32767之间,所以最大数据存储量是65536;
    2. short虽然是int型变量所占空间的1/2,但是在实际中却很少用到。在大型数组中也可以节省空间。
    3. short使用示例:short a=100,short b=-200;

    int

    1. int是32位的数据类型,占用4个字节,默认值是0,它的取值范围是(-2^31) ~(2^31-1),也就是 -2147483648 ~ 2147483647之间,所以最大数据存储量是2^32-1;
    2. int是数据类型是整型,是我们在项目中用到最多的数据类型之一;
    3. int 使用示例:int a=1000,int b=-2000;

    long

    1. long是64位的数据类型,占用8个字节,默认值是0L,它的取值范围是(-2^63) ~(2^63-1),也就是 -9223372036854775808 ~ 9223372036854775808之间,所以最大数据存储量是2^64;
    2. long是数据类型是长整型,是我们在项目中用到最多的数据类型之一。在使用long类型的数据时最好在数值末尾带上大写的L!
    3. long 使用示例:long a=1000L,long b=-2000L;

    float

    1. float是32位的数据类型,占用4个字节,默认值是0,它的取值范围是3.4e-45 ~ 1.4e38 之间;
    2. float是数据类型是单精度,在直接赋值时必须在数字后加上f或F。
    3. float使用示例:float a=10.25f, float b=-20.35F;

    double

    1. double是64位的数据类型,占用8个字节,默认值是0,它的取值范围是4.9e-324 ~ 1.8e308 之间;
    2. double是数据类型是双精度,在直接赋值的时候最好加上D或d。
    3. double使用示例:double a=10.123d, double b= -10.25644D;

    boolean

    1. boolean是布尔类型,占用1个字节,只有两个值,false和true,默认值是 false。
    2. boolean只能用一种标志来记录 true或false,一般和 if 结合使用。
    3. boolean使用示例: boolean a=true,boolean b=false;

    char

    1. char是字符类型,占用2个字节,默认值为空,取值范围 为 0~65535,也就是 u0000 ~ uffff。
    2. char数据类型可以储存任何字符。
    3. char 使用示例: char a=1,char b=’A’;

    数值类型的级别从低到高分别为: 
    byte,char,short(这三个平级)——>int——>float——>long——>double 
    其中由低级别转到高级别,是属于自动类型转换,这点是由系统自动转换的。

    例如将int类型的数据转为float类型的数据。 
    示例:

    int i=10;
    float j=i;
    System.out.println("i:"+i+",j:"+j);

    结果:

    i:10,j:10.0

    如果由高级别转为低级别,则需要强制转换,也就是强制类型转换。 
    例如将int类型的数据转换为byte类型的数据。 
    示例:

    int i=127;
    int j=128;
    byte bye=(byte)i;
    byte bye2=(byte)j;
    System.out.println("i:"+i+",bye:"+bye);
    System.out.println("j:"+j+",bye2:"+bye2);

    结果:

    i:127,bye:127
    j:128,bye2:-128

    说明:因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。所以在进行强制类型转换的时候,要注意取值范围!

    在强制转换的时候需要注意数据的精确度,否则可能会出现数据精确丢失。 
    例如 double类型的数据转换为float类型数据。 
    示例:

    double d=10.1111115;
    float f=(float) d;
    System.out.println("f:"+f+",d:"+d);

    结果:

    f:10.111112,d:10.1111115

    了解了数据类型的级别之后,如果用不同的数据类型进行计算,那么最终的数据类型又是哪一种呢? 
    这里我们用这几种来测试: 
    1.byte 类型的数据 加 short 类型的数据; 
    2.short 类型的数据 加 int 类型的数据; 
    3.int 类型的数据 加 long 类型的数据;

    这里我们使用这个方法来获取最终的数据类型

    public static String getType(Object o){ 
            return o.getClass().toString(); 
        

    代码:

    short a=1;
    byte b=2;
    int c = 3;
    long d = 4;
    System.out.println(getType(a));
    System.out.println(getType(b));
    System.out.println(getType(c));
    System.out.println(getType(d));
    System.out.println(getType(a+b));
    System.out.println(getType(a+c));
    System.out.println(getType(c+d));

    结果:

    class java.lang.Short
    class java.lang.Byte
    class java.lang.Integer
    class java.lang.Long
    class java.lang.Integer
    class java.lang.Integer
    class java.lang.Long

    看到结果是不是有点吃惊呢?那么是为什么呢? 
    这里的不同的数值类型数据进行相加的时候,会自动转换为级别最高的那一个。 
    那么short 类型的数据加 byte 类型的数据为什么是int类型呢? 
    因为在java的世界里,如果比int类型小的类型做运算,java在编译的时候就会将它们统一强转成int类型。 
    如果上述不好理解的,那么这里我们来做个实验测试下,通过结果来进行验证。 
    示例:

    short a=1,b=2;
    byte c=3,d=4;
    System.out.println(getType(a+b));
    System.out.println(getType(c+d));

    结果:

    class java.lang.Integer
    class java.lang.Integer

    那么这里可以得出结论,在数值类型中,若级别小于int,进行计算的时候,最终的数据类型会自动转换为int,如果高于int,最终数据结果会取其中最高的一个!

  • 相关阅读:
    转载 分享探讨程序员的最后归宿!
    Java切换JDK版本时遇到的小错误。
    LR学习笔记16-LR脚本调试
    LR学习笔记15-LR的错误处理
    LR学习笔记14-脚本编写实践过程
    LR学习笔记13-Run-Time Settings设置
    LR学习笔记12-测试脚本的增强方法
    LR学习笔记11-LR自动关联
    LR学习笔记10-HTML和URL比较
    LR学习笔记9-回放测试脚本
  • 原文地址:https://www.cnblogs.com/lxqiaoyixuan/p/8638547.html
Copyright © 2020-2023  润新知