变量与数据类型

变量

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

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 类型的溢出,就没有处理办法了,此时就需要在程序中加上变量值的界限检查,在运行时才不会发生错误。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容