运算符
- 算术运算符
- 赋值运算符
- 比较运算符(关系运算符)
- 逻辑运算符
- 位运算符
- 三元运算符
算术运算符
注意:
- 取模运算的除数和被除数都可正可负,但只有被除数的符号与取模结果的符号相同,除数的符号不影响结果。
- 除法运算若除数和被除数都是整数,则商也是整数。
三位数取十位数:a%100/10 或 a/10%10
赋值运算符
- 当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
- 支持连续赋值。
- +=,-=,*=,/=号运算后不改变数值类型,例:
short a=3;
a=a+1;//编译报错
a+=1;//编译通过
比较运算符
比较运算符的结果都是boolean型
逻辑运算符
& | && | | | || | ! | ^ |
---|---|---|---|---|---|
逻辑与 | 短路与 | 逻辑或 | 短路或 | 逻辑非 | 逻辑异或 |
- Java中不可以写成3<x<6,应该写成x>3 & x<6
- “&”和“&&”的区分:
相同点1:&与&&的运算结果相同
相同点2:当符号左边是true是,二者都会执行符号右边的运算
不同点:当符号左边是false时,&继续执行符号右边的运算,&&不再继续执行右边的运算
“|”和“||”同理,当符号左边是true时,|继续执行符号右边的运算,||不再继续执行右边的运算 - 建议使用&&和||
(运算都是从左到右进行的,左侧与短路运算符若能直接得出结果,则将右侧短路)
位运算符
位运算是直接对整数的二进制进行的运算,运算结果仍是整数
(无符号右移用于运算哈希值)
练习:交换数值
法一:定义临时变量
int temp=num1;
num1=num2;
num2=temp;
法二:使用加减法
弊端:可能超出存储范围;只适用于数值类型(仅int以上)
num1=num1+num2;
num2=num1-num2;
num1=num1-num2;
法三:使用位运算符
弊端:只适用于数值类型
num1=num1^num2;
num2=num1^num2;
num1=num1^num2;
三目运算符
(条件表达式)?表达式1:表达式2;
条件表达式为true,运算后的结果是表达式1,为false,运算后的结果是表达式2。
既可以使用三目运算符又可以使用if-else时有限使用三目运算符,原因:简洁,执行效率高。
运算符的优先级
如何从键盘获取不同类型的变量
- 导包:import java.util.Scanner;
- Scanner的实例化:Scanner scan = new Scanner(System.in);
- 调用Scanner类(文档Scanner class)的相关方法(next()/nextXxx()),来获取指定类型的变量
import java.util.Scanner;
class ScannerTest{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
System.out.println(num);
}
}
对于char型的获取,Scanner没有提供相关的方法。只能获取一个字符串。
但可以使用String类的charAt方法。
System.out.println("请输入您的性别:(男/女)");
String gender = scan.next();
char genderChar = gender.charAt(0);//获取索引为0位置上的字符
System.out.println(generChar);
需要根据相应的方法来输入指定类型的值。如果输入数据与要求的类型不匹配时,会报异常:InputMisMatchException
流程控制
三种基本流程结构:顺序、选择(分支)、循环
if-else if-else
与C语言相同
switch-case
switch(表达式)中表达式的值必须是下述几种类型之一:byte,short, char,int,枚举,String;
default的位置时可选的,但在执行完所有case之后才会引出default。执行完default之后如果没有case还会接着向下执行case。(如果default在第一个,case都没有break,则从default开始跑到末尾自动结束)
for循环
for(i=0;i<5;i++);//i在循环内有效,出了循环就失效了
while与do-while循环
do-while与while循环的区别:至少会经历一次循环体
计算运行时间
获取时间戳System class——currentTimeMillis()
调用方法:
Returns: the difference, measured in milliseconds, between the current time and midnight, January 1, 1970 UTC.
long start=System.currentTimeMillis();
long end=System.currentTimeMillis();
System.out.println("程序运行时间为:"+(end-start)+"ms");
开方
Math class——sqrt()
调用方法:
sqrt(double a)
Returns the correctly rounded positive square root of a double
value.
Math.sqrt(i);
break与continue
continue的用法:
for(i=0;i<10;i++){
if(i%4==0){
continue;
}
System.out.println(i);
}
break:结束当前循环,用于switch-case和循环
continue:结束当次循环,用于循环
相同点:其后不可以执行语句
标签的使用
break与continue默认操作的是当前一层for循环,若想要对指定一层for循环操作,可以在for前使用标识。
label:for(i=0;i<10;i++){
for(j=0;j<10;j++){
if(j%4==0){
break label;//结束指定标识的一层for循环,continue同理
}
}
}
return
return:并非专门用于结束循环的,它的功能是结束一个方法。 当一个方法执行到一个return语句时,这个方法将被结束。
与break和continue不同的是,return直接结束整个方法,不管这个return处于多少层循环之内。