[toc]
## 基本变量类型
数据类型如下图所示
![](https://img.kancloud.cn/3e/44/3e440e3a78ad052a6057d5dd6d530c52_589x269.png)
java有八种基本类型,都是java语言预定好的,并且都是关键字。
这8中基本类型分别是:
整型(4种):byte(8位)、short(16位)、int(32位)、long(64位)
字符型(1种):char(16位)
浮点型(2种):float(32位)、double(64位)
布尔型(1种):boolean
<br>
### 字符型
char类型用于存放一个字符,值用单引号'表示 (双引号表示字符串)
其长度和short一样,也是16位的
只能存放一个字符,超过一个字符就会产生编译错误
~~~
public class HelloWorld{
public static void main(String[] args){
char c = '中';
//char 只能存放一个字符,超过一个字符就会产生编译错误
char c2 = '中国'; //报错
char c3 = 'ab'; //报错
}
}
~~~
### 浮点型
浮点数类型有两种
float 长度为32位
double 长度为64位
注意: 默认的小数值是double类型的
~~~
public class HelloWorld{
public static void main(String[] args){
double d = 123.45;
float f = 54.321;
//该行会出现编译错误,因为54.321是double型的
float f2 = 54.321f;
//该行正确
}
}
~~~
### 布尔型
布尔型用于表示真假
虽然布尔型真正存放的数据是0(false) 1(true)
但是,不能直接使用0 1 进行赋值
~~~
public class HelloWorld {
public static void main(String[] args) {
boolean b1 = true;
boolean b2 = false;
// 虽然布尔型真正存放的数据是0(false) 1(true)
// 但是,不能直接使用0 1 进行赋值
boolean b3 = 1;
//错误!
}
}
~~~
## 转换规则
精度高的数据类型就像容量大的杯子,可以放更大的数据
精度低的数据类型就像容量小的杯子,只能放更小的数据
小杯子往大杯子里倒东西,大杯子怎么都放得下
大杯子往小杯子里倒东西,有的时候放的下,有的时候就会有溢出
<br>
### 低精度向高精度转换
~~~
public class HelloWorld {
public static void main(String[] args) {
long l = 50;
int i = 50;
//int比较小,要放进比较大的long,随便怎么样,都放的进去
l = i;
}
}
~~~
![](https://box.kancloud.cn/cb5434c9e84412586077b2689e105539_661x220.png)
<br>
### 高精度向低精度转换
~~~
public class HelloWorld {
public static void main(String[] args) {
byte b = 5;
int i1 = 10;
int i2 = 300;
b = (byte) i1;
//因为i1的值是在byte范围之内,所以即便进行强制转换
//最后得到的值,也是10
System.out.println(b);
//因为i2的值是在byte范围之外,所以就会按照byte的长度进行截取
//i2的值是300,其对应的二进制数是 100101100
//按照byte的长度8位进行截取后,其值为 00101100 即44
b =(byte) i2;
System.out.println(b);
//查看一个整数对应的二进制的方法:
System.out.println(Integer.toBinaryString(i2));
}
}
~~~
![](https://box.kancloud.cn/45e01bf5c0f382a83ecc09dc9d0665af_635x339.png)
<br>
总结下来就是:低精度向高精度转换随便转都没事;高精度转换低精度有时候可以转有时候不能转,但使用强制类型转换就可以转但是不能保证转换后结果的正确性,如果有溢出,溢出的部分都会丢失。