美文网首页
变量与数据类型

变量与数据类型

作者: San_shi | 来源:发表于2019-08-01 16:20 被阅读0次

    变量

    变量是利用声明的方式,将内存中的某个块保留下来以供程序使用。可以声明为块记载的数据类型为整型、字符型、浮点型或是其他数据类型,作为变量的保存之用。

    Java 的数据类型可分为原始数据类型与引用数据类型。

    原始数据类型也称为基本数据类型,它们包括了最基本的 boolean、 byte、 char、short、 int、 long、 float 与 double 等类型。

    另一种数据类型为引用数据类型,它是以一种特殊的方式指向变量的实体,这种机制类似于 C / C++的指针。这类的变量在声明时是不会分配内存的,必须另外进行开辟内存空间的操作,如字符串与数组均属于这种数据类型。

    声明一个变量时,编译程序会在内存里开辟一块足以容纳此变量的内存空间给它。不管变量的值如何改变,都永远使用相同的内存空间。因此,善用变量将会是一种节省内存的方式。

    常量与变量
    //声明Demo2类
    public class Demo2
    {
        public static void main(String args[])
        {
            int num;  //声明一个整形变量num
            num = 3; //将整形变量赋值为3
            //在屏幕输出变量,用“+”连接
            System.out.println("这是数字"+num);
            System.out.println("我有"+num+"本书!");
        }
    }
    
    

    在上面代码中,num为整形变量将常量3赋值给它。在程序进行的过程中,可以为变量重新赋值,也可以使用已经声明过的变量。

    数据类型

    Java 的变量类型

    在 Java 中规定了八种基本数据类型变量来存储整数、浮点数、字符和布尔值。如下图所示:

    image.png

    接口就是抽象类(abstract ),接口本身 也是一种抽象类,实现接口的类 叫做实现类

    java的基本数据类型:
    image.png

    整数类型

    Java 中,整数数据类型可以分为 long、 int、 short 及 byte 四种:
    long 为 64 位,也就是8 个字节(bytes),可表示范围为-9223372036854775808 到9223372036854775807;
    int 为 32 位,也就是 4 个字节,表示范围为-2147483648 到 2147483647;
    若是数据值的范围在-32768 到 32767 之间时,可以声明为 short(短整数)类型;
    若是数据值更小,在-128 到 127 之间时,可以声明为 byte 类型以节省内存空间。

    例子:

    short num;//声明num为短整型
    

    Java 即会在可使用的内存空间中,寻找一个占有 2 个字节的块供sum 变量使用,同时这个变量的范围只能在-32768 到 32767 之间。

    常量的数据类型

    public class Test
    {
        public static void main(String args[])
        {
            long num = 329852547554;
            System.out.println(num);
        }
    }
    
    执行结果:

    Test.java:5: error: integer number too large
    long num = 329852547554;
    ^
    1 error
    Error: Could not find or load main class Test
    Caused by: java.lang.ClassNotFoundException: Test
    sandbox> exited with status 0

    把整数常量看成是 int 类型,但 329852547553 这个整数已超出了 int 类型所能表示的范围,因此虽然把 num 的类型设为 long,但编译时仍然会发生错误。

    解决方法:只要在整数常量后面加上一个大写的“L”即可.

    public class Test
    {
        public static void main(String args[])
        {
            long num = 329852547554L;
            System.out.println(num);
        }
    }
    
    执行结果:329852547554

    数据类型的最大值与最小值

    Java 提供了 long、 int、 short 及 byte 四种整数类型的最大值、最小值的代码。最大值的代码是 MAX_VALUE,最小值是 MIN_VALUE。

    如果要取用某个类型的最大值或最小值,只要在这些代码之前,加上它们所属的类的全名即可。

    如果程序代码里需要用到长整数的最大值,如图 所示的语法表示:

    image.png

    如果要使用某个类型的代码,则必须先指定该类型所在的类库以及该类型所属的类,但因 java.lang 这个类库属于常用类库,所以默认的 Java 程序会将它加载,因此在实际的应用上设计者可以将它省略。

    Java 所提供的整数的最大值与最小值的标识符及常量值,如下图所示:


    image.png

    溢出的发生

    当整数的数据大小超出了可以表示的范围,而程序中又没有做数值范围的检查时,这个整型变量所输出的值将发生紊乱,且不是预期的运行结果。

    // 整数值如果超出了自己所可以表示范围的最大值,会出现溢出
    public class Test
    {
        public static void main(String args[])
        {
            int x = java.lang.Integer.MAX_VALUE ; // 得到整型的最大值
            
            System.out.println("x = "+x);
            
            System.out.println("x+1 = "+(x+1));
            
            System.out.println("x+2 = "+(x+2));
        }
    }
    

    输出结果:

    x = 2147483647
    x+1 = -2147483648
    x+2 = -2147483647

    当最大值加上 1 时,结果反而变成表示范围中最小的值;当最大值加上 2 时,结果变成表示范围中次小的值,这就是数据类型的溢出。

    image.png

    为了避免 int 类型的溢出,可以在该表达式中的任一常量后加上大写的“L”,或是在变量前面加上 long,作为强制类型的转换。

    // 整数值如果超出了自己所可以表示范围的最大值,会出现溢出
    public class Test
    {
        public static void main(String args[])
        {
            int x = java.lang.Integer.MAX_VALUE ; // 得到整型的最大值
            
            System.out.println("x = "+x);
            
            System.out.println("x + 1 = "+(x+1));
            
            System.out.println("x + 2 = "+(x+2L));
            
            System.out.println("x + 3 = "+((long)x+3));
        }
    }
    

    输出结果:

    x = 2147483647
    x + 1 = -2147483648
    x + 2 = 2147483649
    x + 3 = 2147483650

    程序说明:

    • int x = java.lang.Integer.MAX_VALUE ; 声明 int 类型的整数变量 x,并赋值为整数最大值,即 2147483647。
    • System.out.println("x = "+x); 输出 x 的值,即: 2147483647。
    • System.out.println("x + 1 = "+(x+1)); 输出 x+1 的值,此时溢出发生,运行结果变成-2147483648。
    • System.out.println("x + 2 = "+(x+2L)); 输出 x+2 的值,为了避免溢出发生,在表达式的常量部分 2 后加上 L,执行结果变成 2147483649。
    • System.out.println("x + 3 = "+((long)x+3)); 输出 x+3 的值,为了避免溢出发生,在表达式的整数部分 x 之前加上 long,执行结果变成 2147483650。

    处理 int 类型的溢出,可以利用强制类型转换方式。但是对于 long 类型的溢出,就没有处理办法了,此时就需要在程序中加上变量值的界限检查,在运行时才不会发生错误。

    相关文章

      网友评论

          本文标题:变量与数据类型

          本文链接:https://www.haomeiwen.com/subject/nuuqdctx.html