Appearance
数据类型
数据类型概要
什么是数据类型?从字面上理解,就是对数据进行分类,分类的目的主要是方便处理,基于这个概念,那么咱们学习数据类型的时候,需要抓住的核心就是数据类型到底分了哪些类?每个类的名字是什么?有什么特性等问题
在 Java 中,数据类型主要有两种大类
基本数据类型
引用数据类型
我们这里主要讨论的是基本数据类型,引用数据类型后面会单独学习到,基本数据类型又可以分成三类
数字型:byte、short、int、long、float、dobule
字符型:char
布尔型:boolean
以上的这些类型要掌握的第一个点,那就是这些英文单词你需要记住,例如:int,用来存整数,记住了这些单词以后,再来掌握其他的特点,例如:所占内存大小、最大值、最小值、默认值等
看下面的表
类型 | 内存占用(字节) | 最小值 | 最大值 | 默认值 |
---|---|---|---|---|
byte | 1 | -128 | +127 | 0 |
short | 2 | -32,768 | +32,767 | 0 |
int | 4 | -2,147,483,648 | +2,147,483,647 | 0 |
long | 8 | -9,223,372,036,854,775,808 | +9,223,372,036,854,775,807 | 0L |
float | 4 | 1.4 E-45 | 3.402,823,5 E+38 | 0.0f |
double | 8 | 4.9 E-324 | 1.797,693,134,862,315,7 E+308 | 0.0d |
char | 2 | 0 | +655,35 | ‘\u0000’ |
boolean | 1 | false |
注意:表看不全可以左右滑动
TIP
注意:变量里面存的值,不要超出类型的取值范围
举个例子:
java
package com.nodeing.hello;
public class HelloWorld {
public static void main(String[] args) {
short num = 32767;
// 这里就会出现超出范围的情况,会报错
short num2 = 32768;
}
}
整型
整型就是整数类型,与数学上的整数是一样的意义
byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一
java
byte num1 = 98;
System.out.println(num1);
int 类型
java
// 最小值 -2147483648
// 定义一个整型变量num 初始值-2147483648
int i1 = -2147483648;
// 最大取值
int i2 = 2147483647;
整型还有长整型和短整型,它们的区别是占用的内存大小和取值范围不同
short 短整型
java
// 最小取值 内存中占2个字节
short s1 = -32768;
// 最大取值 内存中占2个字节
short s2 = 32767;
long 长整型
java
// 长整型结尾加L/l,建议加大写的L,因为小写的l容易和数字1混淆
long l1 = 100L;
注意:在存储十六进制或者二进制的时候,写法有些不一样
java
// 十六进制 以 0x开头
int num1 = 0xA;
System.out.println(num5);
// 二进制的时候以0b开头
int num2 = 0b1101;
System.out.println(num6);
浮点型
浮点型就是数学意义上的小数,里面分为单精度(float)和双精度(double)
java
float f1 = 11.2f;
// 科学计数法:11.2e2 = 11.2*10*10
float f2 = 11.2e2f;
System.out.println(f2);
// 科学计数法:11.2e-2 = 11.2*1/(10*10)
float f3 = 11.2e-2f;
System.out.println(f3);
如果你随便写一个小数,默认是 double 类型
java
double d1 = 11.2;
// 结尾加D或者d,因为默认是double类型,所以可以不用加
double d2 = 11.2d;
System.out.println(d1);
System.out.println(d2);
布尔类型型
布尔类型里面只有 true 和 false
java
boolean b1 = true;
boolean b2 = false;
System.out.println(b1);
System.out.println(b2);;
字符类型
char 表示一个字符
java
// 注意,只能用单引号,并且只能存1个字符,内存中占2个字节
char c1 = 'A';
System.out.println(c1);
总结
TIP
1.每种数据类型的英文单词名字要记住
2.内存占用多少字节要记住
3.每种类型里面的值有什么特点,需要记住,例如:小数、整数、字符都应该怎么写
类型转换
先理解一下什么是类型转换?类型转换就是把一种类型转换成另一种类型,为什么要做类型转换?因为只有同类型的两个值做运算才有意义
类型转换分为两种:
自动类型转换
强制类型转换
自动类型转换,即自动帮你做转换了,不需要你做额外的操作,范围小的变量,可以直接赋值给范围大的变量,举个例子:
java
byte num1 = 127;
// 自动将byte类型转成int类型
int num2 = num1;
System.out.println(num2);
范围从小到大,可以记住下面的链条
byte --> short\char --> int --> long --> float --> double
注意:char 占 2 个字节,也是可以转成 int 的
java
char c1 = 'a';
int num3 = c1;
System.out.println(num3); // 97
注意 2: 在表达式中,表达式的最终结果是由高类型决定的
TIP
名词解释:什么叫表达式?表达式,是由数字、算符、数字分组符号(括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。举个例子: a + b 就是一个表达式
java
byte a = 10;
int b = 20;
double c = 11.2;
double d = a + b + c;
System.out.println(d);
注意 3: 在表达式中,byte、short、char 是直接转成 int 来参与运算的
java
byte b1 = 1;
byte b2 = 2;
// b1 b2 是两个byte类型,运算的结果需要用int类型来存
int sum = b1 + b2;
强制类型转换,即强制将类型范围大的变量转换成类型小的变量,你需要手动去转换,举个例子:
java
int b1 = 20;
// 强制把int转成byte
byte b2 = (byte) b1;
注意:强制类型转换的时候,可能会造成数据益出(丢失);
java
int b1 = 200;
byte b2 = (byte) b1;
System.out.println(b2); // -56
造成数据益出其实很好理解,一个内存空间占用大的,你硬是往小空间里塞,那装不下怎么办?肯定会丢失一部分
注意 2:浮点型转成整数类型的时候,直接丢掉小数部分,保留整数部分
java
float f1 = 11.2f;
int num = (int) f1;
System.out.println(num); // 11