一、类型转换
- 自动类型转换
类型范围小的变量,可以直接赋值给类型范围大的变量。
- 强制类型转换
package com.study;
public class TypeDemo03 {
public static void main(String[] args) {
//理解强制类型转换,并使用
/*
int a=20;
byte b =a;//报错
问题:类型范围大的数据或者变量,不能直接赋值给类型范围小的变量,可以使用强制类型转换
注意:强制类型转换会导致数据溢出或者丢失。
*/
int a = 20;
byte b = (byte) a;
System.out.println(b);
int i =1500;
byte j= (byte) i;
System.out.println(j);//数据溢出
float score = 99.5F;
int it = (int) score;
System.out.println(it);//抹除小数部分输出99
}
}
二、运算符
- 基本算数运算符
对字面量或者变量进行操作的符号
package com.study.operator;
public class OperatorDemo01 {
public static void main(String[] args) {
//基本的算术运算符:+-*/%
int a = 10;
int b = 3;
System.out.println(a + b);
System.out.println(a - b);
System.out.println(a * b);
System.out.println(a / b); //3
System.out.println(a % b); //1
//注意:如果2个整数做除法,其结果一定是整数,因为最高类型是整数。
System.out.println(3 / 2);//1
System.out.println(3 / 2 * 1.0);//1.5
}
}
数据拆分案例:将一个三位数拆分;
package com.study.operator;
import java.util.Scanner;
public class OperatorTest1 {
public static void main(String[] args) {
//需求:将一个三位数,拆分成个位,十位,百位,打印在控制台。
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要拆分的三位数:");
int date = sc.nextInt();
//个位:
int ge = date % 10;
System.out.println(ge);
//十位
int shi = date / 10 % 10;
System.out.println(shi);
//百位
int bai = date / 100;
System.out.println(bai);
}
}
- +符号作连接符
"+"符号与字符串运算的时候是用作连接符的,其结果必然是一个字符串。
package com.study.operator;
public class OperatorDemo02 {
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');//102
System.out.println(a + "" + 'a');//"5"+'a'=5a
System.out.println(a + 'a' + "ssj");//102ssj
System.out.println("ssj" + a + 'a');//ssj5a
System.out.println("ssj" + (a + 'a'));//ssj102
}
}
- 自增自减运算符
package com.study.operator;
public class OperatorDemo03 {
public static void main(String[] args) {
//自增自减运算符:++ --
int a = 10;
a++;//a=a+1
//++a; //a=a+1
System.out.println(a);//11
int b = 10;
b--; //b=b-1
// --b; //b=b-1
System.out.println(b);//9
System.out.println("------------------------------");
//在表达式中或者非单独使用的情况:++ --在变量前后存在区别
int i = 10;
int j = ++i; //先把i+1再把i赋值给j
System.out.println(i);//11
System.out.println(j);//11
System.out.println("--------------------------------");
int i1 = 10;
int j1 = i1++;//先把i1赋值给j1,再把i1加一
System.out.println(i1);//11
System.out.println(j1);//10
int a1 = 10;
int b1 = --a1;//先把a1-1,再把a1赋值给b1
System.out.println(a1);//9
System.out.println(b1);//9
System.out.println("------------------------------------");
int m = 10;
int n = m--;//先把m赋值给n,再把m减一
System.out.println(m);//9
System.out.println(n);//10
}
}
自增自减案例:
package com.study.operator;
public class OperatorDemo04 {
public static void main(String[] args) {
//自增自减案例
int k = 4;
int p = 6;
int res = k++ + ++k - --p + p-- - k-- + ++p + 2;
System.out.println(k);//5
System.out.println(p);//5
System.out.println(res);//11
}
}
- 赋值运算符
基本赋值运算符(“=”),eg:int a=5;
扩展赋值运算符
package com.study.operator;
public class OperatorDemo05 {
public static void main(String[] args) {
//赋值运算符的使用:= += -= *= /= %=
int a = 10;
int b = 200;
a += b; //a=(int)a+b;
System.out.println(a);//210
byte i = 20;
byte j = 10;
i += j;//i=(byte)j+i;
System.out.println(i);//30
}
}
- 关系运算符
是对数据进行条件判断的符号,最终会返回一个比较的布尔结果(true、false)
- 逻辑运算符
package com.study.operator;
public class OperatorDemo07 {
public static void main(String[] args) {
//使用逻辑运算符,并能选择合适的逻辑运算符解决问题
double size = 9.8;
double storage = 6;
//需求:尺寸大于等于6.5,内存大于等于8
//注意:必须前后都是true结果才是true
System.out.println(size >= 6.5 & storage >= 8);//false
//需求:要么尺寸大于等于6.5,要么内存大于等于8
//注意:只要有一个是true,其结果就是true
System.out.println(size >= 6.5 | storage >= 8);//true
System.out.println(!true);//false
System.out.println(!false);//true
//逻辑异或:必须2个不同结果才是true
System.out.println(true ^ false);//true
System.out.println(true ^ true);//false
System.out.println(false ^ false);//false
}
}
- 短路逻辑运算符
package com.study.operator;
public class OperatorDemo07 {
public static void main(String[] args) {
//使用逻辑运算符,并能选择合适的逻辑运算符解决问题
double size = 9.8;
double storage = 6;
//需求:尺寸大于等于6.5,内存大于等于8
//注意:必须前后都是true结果才是true
System.out.println(size >= 6.5 & storage >= 8);//false
//需求:要么尺寸大于等于6.5,要么内存大于等于8
//注意:只要有一个是true,其结果就是true
System.out.println(size >= 6.5 | storage >= 8);//true
System.out.println(!true);//false
System.out.println(!false);//true
//逻辑异或:必须2个不同结果才是true
System.out.println(true ^ false);//true
System.out.println(true ^ true);//false
System.out.println(false ^ false);//false
System.out.println("-----------------&& 和 & 以及 || 和 | 的区别---------------------");
int a = 10;
int b = 20;
System.out.println(a > 100 && ++b > 10);//false
System.out.println(b);//20
int i = 10;
int j = 20;
System.out.println(i > 100 & ++j > 10);//false
System.out.println(j);//21
int m = 10;
int n = 20;
// System.out.println(m > 100 || ++n > 20);//true
System.out.println(m > 9 || ++n > 21);
System.out.println(n);//20
}
}
- 三元运算符
package com.study.operator;
public class OperatorDemo08 {
public static void main(String[] args) {
//使用三元运算符,并理解其流程
double score = 98;
String res = score >= 60 ? "通过" : "不通过";
System.out.println(res);
//需求:从下列2个数中找出最大值
int a = 9598494 * 2;
int b = 5894649 * 3;
int max = a > b ? a : b;
System.out.println(max);
}
}