自动转换规则, 从 精度小的类型 转换成 精度大的类型 就叫自动化转换。
规则1: char -> int -> long -> float -> double
规则2: byte -> short -> int -> long ->float -> double
多种类型混合运算, 系统将类型转换成(多种类型中)最大的类型,在进行运算,运算得到的结果也是多种类型种最大的类型。
将 精度大 的类型赋值给 精度小 的类型,会报错 (可以强制转换,但可能会精度缺失)。
(byte,short)和 char 之间不会自动转换。
byte,short,char 可以参与计算,但是在计算之前会转换成int,计算得到的值也只能int 或者 大于 int 的类型接收。(这三种类中无论是单个类型 或 多个类型 参与计算都会转换成int)
数据类型从 大 ——> 小 需要强制转换。
将 精度大 的类型转换成 精度小 的类型,这样做可能会造成精度缺失
byte和short在运算时候,都会自动转换成 int 在计算, 其结果也是int类型。
char 可以用int的常量值赋值,用变量值则需要强转。
强制类型转换(显示类型转换)boolean也不参与;
当某一个值想要提升数据类型时也可以强制类型转换,特殊类型转换;
String类型不能通过强制类型转换;如果用方法的话String是可以进行转换的整形的但字符串必须是数字的话可以转成整形;纯汉字的话是不可以的;
关于Scanner 键盘录入Scanner对象是用来接收键盘输入的数据的,可以接收字符串,数字,浮点数,大数等多种数据
关于nextInt()、next()和nextLine()的理解
next():
一定要读取到有效字符后才可以结束输入。
对输入有效字符之前遇到的空白,next()方法会自动将其去掉。
只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
next()不能得到带有空格的字符串。
nextLine():
以Enter为结束符,nextLine()方法返回的是输入回车之前的所有字符。
可以获得空白。
Scanner scanner = new Scanner(System.in); System.out.println("等待输入数据:"); if(scanner.hasNext()){//hasNext是以空格为结束标志,所以只能打印一个单词 String str = scanner.next(); System.out.println("输入的字符串是:"+str); }
scanner.close();//IO输入必须得关闭
这个只是让你知道不只是有next(),nextLine(),nextDouble,nextInt(),hasNextInt(),等等
记住键盘输入肯定是能输入任何内容的,需要你自己去看看哪些可以用,你需要用到的时候去找找就行了。
自增运算符:++,自减运算符:- -。
前缀自增自减
格式:++操作数或- -操作数
相当于:操作数=操作数+1或操作数=操作数-1
前缀自增自减法中操作数是先进行自增或自减操作,再被使用。
后缀自增自减:
格式:操作数++或操作数- -
相当于:操作数=操作数+1或操作数=操作数-1
前缀自增自减法中操作数是先被使用,再进行自增或自减操作
特殊例子:
int i = 1; i = i++; System.out.println(i);
这里的输出结果不是2,而是1。可能有人会说,哎呀不对啊,按照前面的讲述,这里的i=i++应该相当于i=i;i=i+1;,这样这个结果应该是2才对啊。那么这里就涉及到了JVM内存模型,要从内存出发来理解操作数在内存中的储存过程。
如果觉得理解这个太过麻烦,也可以只记住i=i+1这种特殊形式和结果:
算数运算符:
运 算 符 | 名 称 | 说 明 | 例 子 |
---|---|---|---|
+ | 加 | 求 a 加 b 的和,还可用于 String 类型,进行字符串连接操作 | a + b |
- | 减 | 求 a 减 b 的差 | a - b |
* | 乘 | 求 a 乘以 b 的积 | a * b |
/ | 除 | 求 a 除以 b 的商 | a / b |
% | 取余 | 求 a 除以 b 的余数 | a % b |
其中+号有两种用途:加法运算:只有两个都是数值类型的时候才执行加法运算
连接字符:可以拼接字符串 可以通过空字符转string s=" "+10;的方法把整型10转化为字符串10。
%是取模或者叫取余数
例如46%7的值是4
关系运算符:、<、>=、<=、==、!=
用于表示两个值的关系
System.out.println(1!=2); 返回值只有boolean类型即true、false两种情况,在面向对象的时候会有其他情况出现。
逻辑运算符:
&&、||、!
逻辑运算符的两边一般是表达式,而不是具体的值
例如:
&&:且
System.out.println(3>5 && 3<4); FALSE 左边只要是错误直接跳出
System.out.println(3>5 & 3<4); FALSE 两边都会参与运算
|| :或
System.out.println(3>5 || 3<4); TRUE 左边不正确才,会进行右边运算
System.out.println(3>5 | 3<4); TRUE 两边都会参与运算
!:取反
System.out.println(!(3>5 || 3<4));false