Java-基本数据类型

Java 基本数据类型

Java 的两大数据类型:

  • 内置数据类型
  • 引用数据类型

内置数据类型

对于每一种 数据类型 都有一个 包装类,如:void类型的包装类是 java.lang.Void

对于数值类型的包装类,我们都可以从中获取对应类型的二进制位数、取值范围。

原语 对应的 JDK 类
boolean java.lang.Boolean
byte java.lang.Byte
char java.lang.Character
short java.lang.Short
int java.lang.Integer
long java.lang.Long
float java.lang.Float
double java.lang.Double

具体的例子,见 PrimitiveTypes.java

下面,分类介绍 Java 中的内置数据类型:

void

代表空的值的类型。

整数型

类型 说明 范围 默认值 备注
byte 8位, 有符号, 以二进制补码表示的整数 -128~`127` 0 用在大型数组中节约空间
short 16位, 有符号, 以二进制补码表示的整数 -32768~`32767` 0
int 32位, 有符号, 以二进制补码表示的整数 -2147483648~`2147483647` 0 一般地整型变量默认为 int 类型
long 64位, 有符号, 以二进制补码表示的整数 -2^63~`2^63-1` 0L 字面值常量是数后面加”L”(“L”理论上不分大小写,但小写不易分辩,最好大写)

整型字面值常量都可以用十(正常书写)、八(以0开头)、十六(以0x开头)进制表示:

1
2
3
int decimal = 100;
int octal = 0114;
int hexadecimal = 0x64;

浮点型

浮点数不能用来表示精确的值。

类型 说明 默认值 备注
float 单精度、32位、符合 IEEE 754 标准的浮点数 0.0f float 在储存大型浮点数组的时候可节省内存空间
double 双精度、64 位、符合IEEE 754标准的浮点数 0.0d 浮点数的默认类型为double类型

字符型

类型 说明 范围 默认值 备注
char char类型是一个单一的 16 位 Unicode 字符 \u0000~`\uffff` 字面值常量是单引号里字符(如:'A')

布尔型

类型 说明 取值 默认值
boolean 表示一位的信息 truefalse false

引用数据类型

引用类型指向一个对象,指向对象的变量是引用变量。

对象、数组都是引用数据类型。

所有引用类型的默认值都是 null

引用变量一旦声明后,类型就不能被改变了,但一个引用变量可以用来引用任何与之兼容的类型。

Java 变量

声明一个变量,需要使用如下的格式的语句:

1
type varName;

也可以在声明的同时,对它初始化:

1
type varName = initialValue;

【注】初始化一个对象时,使用:ClassName instanceName = new ClassName();

常量

常量在程序运行时是不能被修改的。

字面值常量

字面值常量,就是直接在程序里写一个值,比如 100, -100.0, 'A'
这个东西很好理解,特殊的已经在上面的内置类型表格中有说明了。

字面值常量可以赋给任何内置类型的变量。

声明常量

我们也可以像声明变量一样声明一个常量。

在 Java 中,使用 final 关键字来修饰常量,声明方式和变量类似:

1
final double PI = 3.1415927;

按照惯例,常量名应该用全部大写的名称表示。

字符串常量

和其他语言一样,Java的字符串常量也是包含在两个引号之间的字符序列,其中可以使用转义字符,也可以含有Unicode字符:

1
2
3
4
"Hello World"
"two\nlines"
"\"This is in quotes\""
"\u0001"

常用的转义字符如下:

符号 字符含义
\n 换行 (0x0a)
\r 回车 (0x0d)
\f 换页符(0x0c)
\b 退格 (0x08)
\0 空字符 (0x20)
\t 制表符
\" 双引号
\' 单引号
\\ 反斜杠
\ddd 八进制字符 (ddd)
\uxxxx 16进制Unicode字符 (xxxx)

类型转换

Java 中类型的转换有以下规则:

  1. 不能对boolean类型进行类型转换。
  2. 不能把对象类型转换成不相关类的对象。
  3. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
  4. 转换过程中可能导致溢出或损失精度。
  5. 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入。

自动类型转换

在自动类型转换中,类型总是从低级高级

1
2
3
低  ---------------------------------------->  高

byte, short, char —> int —> long —> float —> double

⚠️【注意】在进行整数运算时,如果是两个比int类型小的类型做运算,java在编译的时候就会将它们统一强转成int类型。当有比int类型大的类型运算时,会自动转换成它们中最大类型那个。

强制类型转换

通过下面这种语句可以强制类型转化:

1
(type)value

⚠️【注意】转换的数据类型必须是兼容的。

数据类型转换的补充

1、包装类过渡类型转换

一般情况下,我们首先声明一个变量,然后生成一个对应的包装类,就可以利用包装类的各种方法进行类型转换了。

例如:

当希望把float型转换为double型时:

1
2
3
float f1 = 100.00f;
Float F1 = new Float(f1);
double d1 = F1.doubleValue(); //F1.doubleValue()为Float类的返回double值型的方法

简单类型的变量转换为相应的包装类,可以利用包装类的构造函数。
即:Boolean(boolean value)、Character(char value)Integer(int value)Long(long value)Float(float value)Double(double value)

而在各个包装类中,总有形为 ××Value() 的方法,来得到其对应的简单类型数据。
利用这种方法,也可以实现不同数值型变量间的转换。
例如,对于一个双精度实型类,intValue() 可以得到其对应的整型变量,而 doubleValue() 可以得到其对应的双精度实型变量。

2、字符串与其它类型间的转换
其它类型向字符串的转换
  1. 调用类的串转换方法: X.toString();
  2. 自动转换: X+"";
  3. 使用String的方法: String.valueOf(X);

⚠️【注意】在使用 2 时需要注意:任何字符类型与字符串相加,结果都是拼接。
例如:

1
2
3
String s = null;
s += "hello";
System.out.println(s); // 输出 nullhello
字符串作为值,向其它类型的转换
  1. 先转换成相应的封装器实例,再调用对应的方法转换成其它类型

例如,字符串 "32.1" 转换 double 型的值的格式为: new Float("32.1").doubleValue()

也可以用: Double.valueOf("32.1").doubleValue()

  1. 静态parseXXX方法
1
2
3
4
5
6
7
String s = "1";
byte b = Byte.parseByte( s );
short t = Short.parseShort( s );
int i = Integer.parseInt( s );
long l = Long.parseLong( s );
Float f = Float.parseFloat( s );
Double d = Double.parseDouble( s );
总结
  1. 只有 boolean 不参与数据类型的转换
  2. 自动类型的转换:
    • 常数在表数范围内是能够自动类型转换的
    • 数据范围小的能够自动数据类型大的转换
    • 由浮点类型转换成整数类型不会自动转换的,不然将会丢失精度。
    • 引用类型能够自动转换为父类的
    • 基本类型和它们包装类型是能够互相转换的
  3. 强制类型转换:用圆括号括起来目标类型,置于变量前