基本数据类型_整数类型,浮点型型,字符类型,布尔类型_基本数据类型转换、强制转换
- 数据类型
- 基本数据类型
- 整数类型
- 浮点类型
- 浮点类型常量
- 浮点类型变量
- 字符类型
- 转义字符
- ASCII码
- 布尔类型
- 基本数据类型的转换
- 字符常量
数据类型
Java是一种强类型语言,每个变量都必须声明其数据类型。
Java的数据类型可分为两大类:基本数据类型(primitive data type)和引用数据类型(reference data type)。
基本数据类型
整数类型
int,byte,short,long整数类型的表数范围
byte类型127是怎么算出来的:
1字节=8bit
二进制1111 1111
public class TestVar05{
public static void main(String[] args){
//定义整数类型的变量:
//给变量赋值的时候,值可以为不同进制的:
int num1 = 12 ;//默认情况下赋值就是十进制的情况
System.out.println(num1);
int num2 = 012;//前面加上0,这个值就是八进制的
System.out.println(num2);
int num3 = 0x12;//前面加上0x或者0X,这个值就是十六进制的
System.out.println(num3);
int num4 = 0b10;//前面加上0B或者0B,这个值就是二进制的
System.out.println(num4);
//定义byte类型的变量:
byte b = 126;//定义了一个byte类型的变量,名字叫b,赋值为12
System.out.println(b);
//注意:超范围的赋值会报错。
short s = 30000;
System.out.println(s);
int i = 1234;
System.out.println(i);
//整数类型默认就是int类型的,所以12345678910是一个int类型的数,对于int类型来说,它超出范围了
//要想把一个数给long类型变量,那么后面加上L(推荐)或者l就可以了
long num5 = 12345678910L;
System.out.println(num5);
//注意:只有这个数超出int类型的范围了后面才需要加上L,否则无需加L也可以赋值给long类型:
long num6 = 12;
System.out.println(num6);
}
}
浮点类型
浮点类型常量
- 十进制数形式,例如: 3.14 314.0 0.314
- 科学记数法形式,如
314e2 314E2 (E的大小写没有区分) 314E-2
double f = 314e2; //31410^2–>31400.0
double f2 = 314e-2; //31410^(-2)–>3.14
浮点类型变量
浮点类型float和double的表数范围:
浮点数默认为double
//注意:浮点型默认是double类型的,要想将一个double类型的数赋给float类型,必须后面加上F或者f
float f1 = 3.14234567898623F;
System.out.println(f1);
我们不要进行浮点型类之间的比较
float f2 = 0.3F;
double d2 = 0.3;
System.out.println(f2==d2);
/*
= 赋值运算: 将等号右侧的值赋给等号左侧
== 判断==左右两侧的值是否相等 :结果要么相等 要么不相等
==运算符的结果就是要么是true,要么是false
*/
输出结果:
flase
因为float和double的存储方法不一样,所以比较会出错。
一般用不到float和double,因为浮点类型算术会产生误差,后期会通过特殊的类来实现浮点数的计算
字符类型
Java中使用单引号来表示字符常量,字符型在内存中占2个字节。
char 类型用来表示在Unicode编码表中的字符。Unicode编码被设计用来处理各种语言的文字,它占2个字节,可允许有65536个字符。
转义字符
ASCII码
public class TestVar08{
public static void main(String[] args){
char ch1 = 'A';
System.out.println(ch1);//A
System.out.println(ch1+90);//155
System.out.println(155-ch1);//90
//char类型我们看到的样子就是它本身的字面常量,但是底层在进行计算的时候,实际上是按照一个码进行计算的。
//这个码就是ASCII
//之前说char类型是按照Unicode码表进行存储的 (Unicode兼容了ASCII码,Unicode的前128位置ASCII)
char ch2 = '中';
System.out.println(ch2);// 中
System.out.println(ch2+90);// 20103
System.out.println(20103-ch2);// 90
//转换:
int num1 = (int)ch2;
System.out.println(num1);//20013
char ch = (char)20013;
System.out.println(ch);
int num2 = '中';
char ch5 = 20013;
System.out.println(ch5);
//面试题:
char ch6 = '2'+2;//字符2的ASCII码为50,50+2=52,ASCII码中52对应的字符是4;这里的2,4都是字符,而不是int类型数字。
System.out.println(ch6);//'4'--->4
}
}
布尔类型
boolean类型有两个常量值,true和false,在内存中占一位(不是一个字节),不可以使用 0 或非 0 的整数替代 true 和 false ,这点和C语言不同。 boolean 类型用来判断逻辑条件,一般用于程序流程控制 。
public class TestVar09{
public static void main(String[] args){
//创建一个布尔类型的变量:
boolean flag1 = true;
System.out.println(flag1);
boolean flag2 = false;
System.out.println(flag2);
boolean flag3 = 5==9;
System.out.println(flag3);
boolean flag4 = 5<9;
System.out.println(flag4);
}
}
基本数据类型的转换
`
byte,short,char–>int–>long–>float–>double(从左往右级别越来越高)
当一个表达式中有多种数据类型的时候,要找出当前表达式中级别最高的那个类型,然后其余的类型都转换为当前表达式中级别最高的类型进行计算。
double d2 = 12+1294L+8.5F+3.81+'a';
System.out.println(d2);//3.81是Double类型的数据,所以计算时会将右边所有的数转换成Double的数据。
int i2 = (int)(12+1294L+8.5F+3.81+'a');
System.out.println(i2);//3.81是Double类型的数据,所以计算时会将右边所有的数转换成Double的数据。然后才进行int类型强制转换。
/*
在进行运算的时候:
左=右 : 直接赋值
左<右 :强转
左>右 :直接自动转换
*/
//以下情况属于特殊情形:对于byte,short,char类型来说,只要在他们的表数范围中,赋值的时候就不需要进行。
//强转了直接赋值即可。
byte b = 12;
System.out.println(b);
byte b2 = (byte)270;
System.out.println(b2);
//这里输出14。270的二进制0001 0000 1110,而byte类型为8位,超出8位后,强制转换,会造成精度损失。只把0000 1110保留了下来。
字符常量
一个变量被final修饰,这个变量就变成了一个常量,这个常量的值就不可变了
这个常量就是我们所说的 字符常量
字符常量的名字全部大写