个人微信:yinhaoliang6
2. Java 数据类型
Java 中的数据类型,分为引用类型和基本数据类型。基本类型有 8 种,引用类型将在面向对象时详细讲解,此处了解即可.
2.1. 八种基本数据类型 ***
整型: byte, short, int, long
浮点型: float, double
字符型: char
布尔型: boolean
2.2.整数类型 ***
整数类型有 byte, short, int, long
类型 | 占位 | 最大值 | 最小值 |
---|---|---|---|
byte | 8 | 2^7-1 | -2^7 |
short | 16 | 2^15-1 | -2^15 |
int | 32 | 2^31-1 | -2^31 |
long | 64 | 2^63-1 | -2^63 |
- byte占用8位,每位用0或1表示,能够表示256(2^8)个数据。
- 这8位分为符号位(最高位)和数值位(剩余七位),符号位0表示正数,1表示负数
整数字面量默认是 int 类型,如果不超出声明类型的范
围, 则可以给小类型直接赋值(不需要强记,在编写程序过程中会逐渐理解)。
byte b = 128; //超范围赋值
byte b1 = 127;
byte b2 = -128;
使用整数类型(byte, short, int)要注意取值范围, (-128~127)之间的整数字面量可以直接赋值给byte 类型,Java 会自动处理符号位.
long 类型的字面量需要使用"L",“l” 后缀,否则编译不通过。注意如图所示,因为整数值的默认字面量是 int 类型,13241234856854 明显超出了 int 的范围,所以报编译错误,但是如果在后面加了后缀"L",则表示该数是 long 类型的.
java 底层 byte,short 按照 32 位计算(注意 int 类型范围也是 32 位)
public static void main(String[] args)
{
long a = 13241234856854; //编译错误
long b = 13241234856854L;
}
2.3.浮点数类型 **
用于表示小数的数据类型.
float 类型共 32 位(与 int 相同)
int 类型的数据能表示的范围比 float 类型小,int 类型数据表示的精度比 float 大.
float 类型因为精度过低,所以一般很少使用,一般我们会使用 double。
对于float类型来说,它小数点后面有6-7位小数,而对于double类型来说,它小数点后面有15位小数,所以double类型比float类型精度高。又由于15是 7的两倍多,所以float称为单精度浮点型, double称之为双精度浮点型.
double 精度比 int 精确,但是不如 long;double 范围大于 long。
需要注意的是,浮点数的字面量默认是 double, D d 后缀是 double, f F 是 float。
Java虚拟机规范:https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.2
2.4.字符类型 char **
- java中char类型占2个字节、16位可以存放汉字,字母和数字占一个字节,一个字节8位,中文占2个字节,16位
- char类型赋值
char a=’a’; //任意单个字符,加单引号。
char a=’中’;//任意单个中文字,加单引号。
char a=111;//整数。0~65535。十进制、八进制、十六进制均可。输出字符编码表中对应的字符
字符类型是经常用到的,比较有趣,要掌握。字符类型是一个16位无符号整数, 是一个2进制数
这个数值是一个字符的 unicode 编码值。
unicode 编码,是全球范围内的编码方法, 编制了英文, 中,日,韩,阿拉伯, 希伯来等等共 8 万多个
字符(unicode 编码在设计的时候就旨在能表示世界上所有文字)
Java char 的范围 0~65535 不能表示全部 unicode,但是可以表示 unicode 只能够最常用的部分,
足够用的了。
Unicode 编码中英文部分不与ASCII 码兼容(ASCII 表示范围 0~128), 同时英文字符和数字是连续
编码的。
编码是什么?在计算机中不能写字,只能有用 0 和 1 表示的数,那么我们人为做了规定,某个数除
了表示一个数,还可以表示成一个字符。一个 10 进制数 65 代表的字符就是大写字母 A,如下所示:
public class Test
{
public static void main(String[] args)
{
char c = 65;
System.out.println(c); //A
}
}
这一切都是为了尽可能的按人的习惯显示和输出,在计算机内部永远是 0 和 1 存储和运算的。
如下图,20013 按字符输出是"中",按数字输出是 20013.
unicode对照表
http://blog.csdn.net/hherima/article/details/9045861
public static void main(String[] args)
{
char c = 20013;
System.out.print(c); //中
System.out.print((int)c);
}
注:例中的(int)c 表示将字符强制类型转换为数字,接下来会讲。
如上例中,做个运算,如下图,我们得到的输出结果是 C,是因为在 Java 中运仍然按数字运算,
但是输出时按照它的类型(char)来输出。
public static void main(String[] args)
{
char c = '中' + 3;
System.out.println(c); //丰
System.out.println((int)c);
}
如下案例是利用 Java 提供的产生随机数的方法随机生成一个数,然后将此数转换为 char 类型
public static void main(String[] args)
{
Random r = new Random();
int rInt = r.nextInt(58); //产生一个随机数[0,58);
System.out.println(rInt);
char c = (char)('A' + rInt);
System.out.println(c);
}
char 类型是无符号的 16 位整数,最小值为 0, 最大值为 65535 = 2^16-1,在程序中为一个字符
赋值,字符字面量使用单引号,可以为 char 赋值的有字符、数字、符号,如下所示:
注意:特殊字符采用转义字符表示,如:
‘\n’ 表示回车
‘\t’ 表示制表位字符
‘\’ 表示\
‘’’ 表示单引号
‘"’ 表示双引号
'\u4e2d’表示 unicode 编码对应的字符
当我们的控制台显示如下为"?"时,代表在我本操作系统中找不到该数字对应的字库(我们的操作系统中最多存 2 万多的汉字,65535 本操作系统也不认识)
2.5.boolean 布尔类型 *
表达: 真(true)/假(false)。一般用于判断语句块中,如图