Java语言基础知识-类型转换,运算符
类型转换
一, 自动类型转换
- 为什么要进行自动类型转换?
存在不同类型的变量赋值给其他类型的变量。 - 自动类型转换是什么样的?
类型范围小的变量,可以直接赋值给类型范围的大变量。 - 案例
package com.itheima.type;
public class TypeDemo1 {
//主方法
public static void main(String[] args) {
// 目标:理解自动类型转换
byte a = 20;
int b = a; // 发生自动类型转换
System.out.println(a);
System.out.println(b);
int age = 23;
double db = age; // 发生自动类型转换
System.out.println(age);
System.out.println(db);
char ch = 'a';
int code = ch;
System.out.println(code);
}
}
二,表达式的自动类型转换
- 表达式的自动类型转换是什么样的?
小范围的类型会自动转换成大范围的类型运算 - 表达式的最终结果类型是由谁决定的?
最终类型是由表达式中最高的类型决定的 - 表达式有哪些类型转换是需要注意的?
byte,short,char是直接转换成int类型参与运算的 - 案例
package com.itheima.type;
public class TypeDemo2 {
//主方法
public static void main(String[] args) {
// 目标:表达式的自动类型转换规则
byte a = 10;
int b = 20;
double c = 1.0;
double d = a + b +c;
System.out.println(d);
d = a + b - 2.3;
System.out.println(d);
// 面试题
byte i = 10;
byte j = 20;
int k = i + j;
System.out.println(k);
}
}
三,强制类型转换
- 什么是强制类型转换
可以强行将类型范围大的变量,数据赋值给类型范围小的变量
数据类型 变量 = (数据类型 )变量, 数据 - 强制类型转换有哪些需要注意的?
可能出现数据丢失
小数强制转换成整数是直接截断小数保留整数。
运算符
一,基本算数运算符
- 算数运算符有哪些?
+,-,*,/,% - /需要注意什么,为什么?
如果两个整数做除法,其结果一定是整数,因为最高类型是整数。
3.案例
需求:一个三位数,将其拆分为个位,十位,百位后,打印在控制台
package com.itheima.operator;
public class OperatorTest2 {
//主方法
public static void main(String[] args) {
// 需求:拆分3位数,把个位,十位,百位分别输出
int data = 598;
// 1. 个位
int ge = data % 10;
System.out.println("个位:" + ge);
// 2. 十位
int shi = data / 10 % 10;
System.out.println("十位:" + shi);
// 3. 百位
int bai = data / 100;
System.out.println("百位:" + bai);
}
}
二,+符号做连接符
- +除了做基本数学运算,还有哪些功能?
与字符串做+运算时会被当成连接符,其结果还是字符串;
能算则算,不能算就在一起 - 案例
package com.itheima.operator;
public class OperatorDemo3 {
//主方法
public static void main(String[] args) {
// 目标:+符号做连接的识别
int a = 5;
System.out.println("abc" + 'a'); // abca
System.out.println("abc" + a); // abc5
System.out.println(5 + a); // 10
System.out.println("abc" + 5 + 'a'); // abc5a
System.out.println(15 + "abc" +15); // 15abc15
System.out.println(a + 'a');// 5 + 97 = 102
System.out.println(a + " " + 'a'); // 5 a
System.out.println(a + 'a' + "itheima"); // 102itheima
System.out.println("itheima" + a + 'a'); // itheima5a
System.out.println("itheima" + (a + 'a')); // itheima102
}
}
三,自增自减运算符
- 自增,自减运算符有什么作用?
++ ,–。对当前变量值+1, -1 - 自增,自减运算符在变量前后有什么区别?
如果单独使用放前后是没有区别的
非单独使用:在变量前,先进行变量自增/自减,在使用变量。
非单独使用:在变量后,先使用变量,再进行变量自增/自减。 - 案例
package com.itheima.operator;
public class OperatorDemo4 {
//主方法
public static void main(String[] args) {
// 目标:学会用自增自减运算符:++ --
int a = 10;
a++; // a = a + 1;
++a; // a = a + 1;
System.out.println(a);
int b = 10;
// b--; //b = b - 1;
System.out.println(b);
System.out.println("-------------------------------------------");
// 在表达式中或者不是单独操作的情况,++ -- 在变量前后存在的区别
// ++ -- 在变量前面, 先+1,-1在使用
int i = 10;
int j = ++i;
System.out.println(i); // 11
System.out.println(j); // 11
// ++ -- 在变量的后面,先使用再+1 -1
int m = 10;
int n = m++;
System.out.println(n); // 10
System.out.println(m); // 11
System.out.println("-----------拓展案例---------------");
int k = 3;
int p = 5;
// k 3 -> 4-> 5-> 4
// p 5 -> 4 -> 3 -> 4
// rs 3 + 5 - 4 + 4 - 5 + 4 + 2
int rs = k++ + ++k - --p + p-- - k-- + ++p + 2;
System.out.println(k);
System.out.println(p);
System.out.println(rs);
}
}
四,赋值运算符
- 赋值运算符有哪些?
=,+=,-=,*=,/=,%= - 作用是什么?
基本作用是赋值
+=还可以实现数据的累加,把别人的数据加给自己 - 案例
package com.itheima.operator;
public class OperatorDemo5 {
//主方法
public static void main(String[] args) {
// 目标:学会使用赋值运算符:= += -= *= /= %=
int a = 10;
int b = 200;
// a = a + b;
a += b; // a = (int)(a + b)
System.out.println(a);
byte i = 10;
byte j = 20;
i += j; // i = (byte) (i + j);
System.out.println(i);
int m = 10;
int n = 5;
// m += n;
//m -= n; // 等价于 m = (int)(m-n)
//m *= n; // 等价于 m = (int)(m*n)
//m /= n; // 等价于 m = (int)(m/n)
m %= n; // 等价于 m = (int)(m%n)
System.out.println(m);
}
}
五,关系运算符
六,逻辑运算符
1.逻辑运算符有哪些,有什么特点?
逻辑与“&”:有一个为false,结果是false
短路与“&&”:一个为false,结果是false。前一个为false,后一个条件不执行了
逻辑或“|”:有一个为true,结果是true
短路或“||”:一个为true,结果是true。前一个为true,后一个条件不执行了
逻辑非“!”:!false=true,!ture= false
逻辑异或“^”:相同是false,不同是true
注意:实际开发中,常用的逻辑运算符还是:&&,||,!
七,三元运算符
案例
package com.itheima.operator;
public class OperatorDemo8 {
//主方法
public static void main(String[] args) {
// 目标:学会使用三元运算符,理解其流程
double score = 98;
String rs = score >= 60 ? "考试通过" : "挂科";
System.out.println(rs);
// 需求:从两个整数中找出最大值
int a = 100000000;
int b = 2000;
int max = a > b ? a : b;
System.out.println(max);
System.out.println("------------------------");
int i = 10;
int j = 30;
int k = 50;
// 1. 找出两个整数中的最大值
int temp = i > j ? i : j;
// 2. 拿临时变量与第二个变量的值继续比较
int rsMax = temp > k ? temp : k;
System.out.println(rsMax);
System.out.println("-------拓展知识----------");
int rsMax1 = i > j ? i > k ? i : k : j > k ? j : k;
System.out.println(rsMax1);
}
}
八,运算符优先级
案例:
package com.itheima.operator;
public class OperatorDemo9 {
//主方法
public static void main(String[] args) {
// 目标:看看Java是否存在优先级,大家以后需要注意优先级
System.out.println(10 > 3 || 10 > 3 && 10 < 3);
System.out.println((10 > 3 || 10 > 3 )&& 10 < 3);
}
}
九,键盘录入技术
案例
package com.itheima.scanner;
import java.util.Scanner;
// 1. 导包操作(通过IDE导包)
public class ScannerDemo {
//主方法
public static void main(String[] args) {
// 目标:学会使用键盘录入技术
// 2. 得到一个键盘扫描器对象
Scanner sc = new Scanner(System.in);
// 3. 调用sc对象的功能等待接收用户输入的数据
// 这个代码会等待用户输入的数据,直到用户输入完数据并按回车键会把数据拿到
System.out.println("请输入年龄:");
int age = sc.nextInt();
System.out.println("你的年龄是:" + age);
System.out.println("请输入名字:");
String name = sc.next();
System.out.println("欢迎:" + name);
}
}