本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/180
Java语言是强类型语言,编译器存储在变量中的数值具有适当的数据类型,所有的变量都必须先明确定义其数据类型,然后才能使用。Java 中所有的变量、表达式和值都必须有自己的类型,没有“无类型”变量这样的概念。
学习任何一种编程语言都要了解其数据类型,几乎所有的编程语言中都会有数据类型,什么是数据类型呢?软件的存在主要是进行数据的处理,现实生活中的数据会有很多,所以编程语言对其进行了分门别类,然后不同的数据类型的数据会给其分配不同大小的空间进行存储。换句话说,Java中的数据类型作用就是指导Java虚拟机在程序运行阶段到底应该给该变量分配多大的内存空间。
一、Java数据类型
变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。
内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。
因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。
Java 语言支持的数据类型分为两种:**基本数据类型(Primitive Type)**和 引用数据类型(Reference Type)。
二、Java的基本数据类型
Java语言提供了八种基本数据类型。基本数据类型包括 boolean(布尔型)、float(单精度浮点型)、char(字符型)、byte(字节型)、short(短整型)、int(整型)、long(长整型)和 double (双精度浮点型)共 8 种。其中:
整数型(不带小数的数字):byte,short,int,long
浮点型(带小数的数字):float,double
字符型(文字,单个字符):char
布尔型(真和假):boolean
注意:char 代表字符型,实际上字符型也是一种整数类型,相当于无符号整数类型。
类型名称 | 关键字 | 占用内存 | 取值范围 | 默认值 |
---|---|---|---|---|
字节型 | byte | 1 字节 | -128~127,(-2^7~2^7-1) | 0 |
短整型 | short | 2 字节 | -32768~32767,(-2^15~2^15-1) | 0 |
整型 | int | 4 字节 | -2147483648~2147483647,(-2^31~2^31-1) | 0 |
长整型 | long | 8 字节 | -9223372036854775808L~9223372036854775807L,(-2^63~2^63-1) | 0L |
单精度浮点型 | float | 4 字节 | /-3.4E 38F(6~7 个有效位) | 0.0f |
双精度浮点型 | double | 8 字节 | /-1.8E 308 (15 个有效位) | 0.0d |
字符型 | char | 2 字节 | ISO 单一字符集 | 'u0000' |
布尔型 | boolean | 1 字节 | true 或 false | false |
注意:一个字节占8个位。
1.1 字节型(byte)
byte 类型是最小的整数类型。
byte 数据类型是8位、有符号的,以二进制补码表示的整数;
当用户从网络或文件中处理数据流时,或者处理可能与 Java 的其他内置类型不直接兼容的未加工的二进制数据时,该类型非常有用。
1.2 短整型(short)
short 数据类型是 16 位、有符号的以二进制补码表示的整数。
short 类型限制数据的存储为先高字节,后低字节,这样在某些机器中会出错,因此该类型很少被使用
1.3 整型(int)
int 类型是最常使用的一种整数类型。
int 数据类型是32位、有符号的以二进制补码表示的整数;
1.4 长整型(long)
long 数据类型是 64 位、有符号的以二进制补码表示的整数;
对于大型程序常会遇到很大的整数,当超出 int 类型所表示的范围时就要使用 long 类型。
1.5 浮点类型(float和double)
浮点类型是带有小数部分的数据类型,也叫实型。浮点型数据包括单精度浮点型(float)和双精度浮点型(double),代表有小数精度要求的数字。
单精度浮点型(float)和双精度浮点型(double)之间的区别主要是所占用的内存大小不同,float 类型占用 4 字节的内存空间,double 类型占用 8 字节的内存空间。双精度类型 double 比单精度类型 float 具有更高的精度和更大的表示范围。
Java 默认的浮点型为 double,例如,11.11 和 1.2345 都是 double 型数值。如果要说明一个 float 类型数值,就需要在其后追加字母 f 或 F,如 11.11f 和 1.2345F 都是 float 类型的常数。
例如,可以使用如下方式声明 float 类型的变量并赋予初值。
代码语言:javascript复制float price = 10.2f; // 定义float类型并赋予初值
也可以使用如下的任意一种方式声明 double 类型的变量并赋予初值。
代码语言:javascript复制double price = 11.254d; // 定义double类型的变量并赋予初值
或
double price = 11.254; // 定义double类型的变量并赋予初值
注意:一个值要能被真正看作 float,它必须以 f(或 F)后缓结束;否则,会被当作 double 值。对 double 值来说,d(或 D)后缓是可选的。
1.6 布尔类型(boolean)
布尔类型(boolean)用于对两个数值通过逻辑运算,判断结果是“真”还是“假”。Java 中用保留字 true 和 false 来代表逻辑运算中的“真”和“假”。因此,一个 boolean 类型的变量或表达式只能是取 true 和 false 这两个值中的一个。
在 Java 语言中,布尔类型的值不能转换成任何数据类型,true 常量不等于 1,而 false 常量也不等于 0。这两个值只能赋给声明为 boolean 类型的变量,或者用于布尔运算表达式中。
1.7 字符类型
ava 语言中的字符类型(char)使用两个字节的 Unicode 编码表示,它支持世界上所有语言,可以使用单引号字符或者整数对 char 型赋值。
一般计算机语言使用 ASCII 编码,用一个字节表示一个字符。ASCII 码是 Unicode 码的一个子集,用 Unicode 表示 ASCII 码时,其高字节为 0,它是其前 255 个字符。
Unicode 字符通常用十六进制表示。例如"u0000"~"u00ff"表示 ASCII 码集。"u"表示转义字符,它用来表示其后 4 个十六进制数字是 Unicode 码。
字符型变量的类型为 char,用来表示单个的字符,例如:
代码语言:javascript复制char letter = 'A';
char numChar = '1';
对于数值类型的基本类型的取值范围,我们无需强制去记忆,因为它们的值都已经以常量的形式定义在对应的包装类中。
代码语言:javascript复制package com.joshua317;
public class Main {
public static void main(String[] args) {
// byte
System.out.println("基本类型:byte 二进制位数:" Byte.SIZE);
System.out.println("包装类:java.lang.Byte");
System.out.println("最小值:Byte.MIN_VALUE=" Byte.MIN_VALUE);
System.out.println("最大值:Byte.MAX_VALUE=" Byte.MAX_VALUE);
System.out.println();
// short
System.out.println("基本类型:short 二进制位数:" Short.SIZE);
System.out.println("包装类:java.lang.Short");
System.out.println("最小值:Short.MIN_VALUE=" Short.MIN_VALUE);
System.out.println("最大值:Short.MAX_VALUE=" Short.MAX_VALUE);
System.out.println();
// int
System.out.println("基本类型:int 二进制位数:" Integer.SIZE);
System.out.println("包装类:java.lang.Integer");
System.out.println("最小值:Integer.MIN_VALUE=" Integer.MIN_VALUE);
System.out.println("最大值:Integer.MAX_VALUE=" Integer.MAX_VALUE);
System.out.println();
// long
System.out.println("基本类型:long 二进制位数:" Long.SIZE);
System.out.println("包装类:java.lang.Long");
System.out.println("最小值:Long.MIN_VALUE=" Long.MIN_VALUE);
System.out.println("最大值:Long.MAX_VALUE=" Long.MAX_VALUE);
System.out.println();
// float
System.out.println("基本类型:float 二进制位数:" Float.SIZE);
System.out.println("包装类:java.lang.Float");
System.out.println("最小值:Float.MIN_VALUE=" Float.MIN_VALUE);
System.out.println("最大值:Float.MAX_VALUE=" Float.MAX_VALUE);
System.out.println();
// double
System.out.println("基本类型:double 二进制位数:" Double.SIZE);
System.out.println("包装类:java.lang.Double");
System.out.println("最小值:Double.MIN_VALUE=" Double.MIN_VALUE);
System.out.println("最大值:Double.MAX_VALUE=" Double.MAX_VALUE);
System.out.println();
// char
System.out.println("基本类型:char 二进制位数:" Character.SIZE);
System.out.println("包装类:java.lang.Character");
// 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台
System.out.println("最小值:Character.MIN_VALUE="
(int) Character.MIN_VALUE);
// 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台
System.out.println("最大值:Character.MAX_VALUE="
(int) Character.MAX_VALUE);
}
}
代码语言:javascript复制基本类型:byte 二进制位数:8
包装类:java.lang.Byte
最小值:Byte.MIN_VALUE=-128
最大值:Byte.MAX_VALUE=127
基本类型:short 二进制位数:16
包装类:java.lang.Short
最小值:Short.MIN_VALUE=-32768
最大值:Short.MAX_VALUE=32767
基本类型:int 二进制位数:32
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE=-2147483648
最大值:Integer.MAX_VALUE=2147483647
基本类型:long 二进制位数:64
包装类:java.lang.Long
最小值:Long.MIN_VALUE=-9223372036854775808
最大值:Long.MAX_VALUE=9223372036854775807
基本类型:float 二进制位数:32
包装类:java.lang.Float
最小值:Float.MIN_VALUE=1.4E-45
最大值:Float.MAX_VALUE=3.4028235E38
基本类型:double 二进制位数:64
包装类:java.lang.Double
最小值:Double.MIN_VALUE=4.9E-324
最大值:Double.MAX_VALUE=1.7976931348623157E308
基本类型:char 二进制位数:16
包装类:java.lang.Character
最小值:Character.MIN_VALUE=0
最大值:Character.MAX_VALUE=65535
三、Java的引用数据类型
Java的引用数据类型建立在基本数据类型的基础上,包括数组、类和接口。引用数据类型就是对一个对象的引用,引用类型变量就是一个指针,指向对象的变量是引用变量,只是 Java 语言里不再使用指针这个说法。另外,Java 语言中不支持 C 中的指针类型、结构类型、联合类型和枚举类型。
引用类型还有一种特殊的 null 类型。空类型(null 类型)就是 null 值的类型,这种类型没有名称。因为 null 类型没有名称,所以不可能声明一个 null 类型的变量或者转换到 null 类型。空引用(null)是 null 类型变量唯一的值。空引用(null)可以转换为任何引用类型。在实际开发中,可以忽略 null 类型,假定 null 只是引用类型的一个特殊直接量。
注意:空引用(null)只能被转换成引用类型,不能转换成基本类型,因此不要把一个 null 值赋给基本数据类型的变量。
本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/180