基本数据类型转换
数据间需要传递,那么可能会出现类型不一致,所以不同类型间需要相互转换。8中基本数据类型之间除了布尔型不能与其他7种之间转换,其他的byte,short,int,long,float,double,char之间都可以相互转换。
字符型
char表示单个字符
计算机之所以能显示各种字符和符号,是因为底层有编码表,每个字符在码表中都有相对应的十进制编号
但ASCII码无法表示中文字符等,所以Java默认使用Unicode,集成ASCII码值,支持各国语言符号。
char a='中';
打印所得20013,“中”看似是字符,本质上是一个整数,对应Unicode中的编号。
char类型可运算,先将“a”转化为Unicode中的编号,再进行运算(字符-->int-->运算)
转换规则:强制转换,默认转换
默认转换:byte,short,char-->int-->long-->float-->double(小容量可直接转换为大容量)
注意:运算时会默认转换为int型,float和long由于小数在底层存储结构不同,导致大小也不同。
强制转换:
可能会出现数据溢出,小容量容不下大容量,精度降低
int a=258;
byte b=(byte) a;
//此时b=2
float c=10.55f;
long d=(long) c;
//此时d=10
混合运算时会默认将小类型转换为大类型
运算符
算术运算符:
+,-,*,/,%,++,--;
其中,+可进行字符串的连接和数值运算,其余的均只能进行数值运算(char也可参与算术运算)
注意:s=s+2和s+=2是不同的
s+=2;
short s=(short) s+2;
//过程中进行了隐式的强制数据类型转换
逻辑运算:
&,|,!,^,&&,||(运算符两边均是运算值,&,|,!,^还可以参与位运算)
注意:!(实际为真,结果相反)^(相同的为false,不同的为true)
&与&&的区别:&&遇到false就会停止,不再执行,而&还会继续运行
|与||的区别:与上类似,|前有一个true就返回true,但仍会继续执行,而||遇到true就停止。
条件运算符(三元运算符):
(条件表达式)?表达式1:表达式2
条件为true,表达式1;条件为false,表达式2;
int max=(a>b)?a:b;
//true则max=a,反之;
最终返回一个与前面声明类型一致
位运算符:
<<(左移),>>(右移),>>>(无符号右移),~(非)
“位”指的是二进制的bit位运算,是更底层的运算。
int a=4;
a<<1;
//此时a=8;
有符号右移,负数,移动后符号不变
无符号右移,不管前面符号位是什么,移动后统一补0
控制台输入
需要在无操作界面(UI)的情况下让用户和程序实现交互式数据输入,此时Java在前期提供一个类(Scanner类),通过此类可以让用户在控制台输入数据,并将数据录入数据中。
Scanner s=new Scanner(System.in);
//创建一个Scanner类的对象
int a=s.nextInt();
//Scanner对象去执行数据的读取,程序运行到此行时会阻塞,当用户输入完成时,按下回车,结束输入,读入程序
import java.util.Scanner;
//导入Java.util包下的Scanner类