Java基础语法02-运算符
算数运算符
运算符和表达式
·运算符:对常量或者变量进行操作的符号
·表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。
·不同运算符连接的表达式体现的是不同类型的表达式。
·例:
int a = 10;
int b = 20;
int c = a + b;
+:是运算符,并且是算术运算符
a+b:是表达式,由于+是算术运算符,所以这个表达式叫算术表达式
算术运算符
符号 | 作用 | 说明 |
---|---|---|
+ | 加 | |
- | 减 | |
* | 乘 | |
/ | 除 | 整数相除只会得到整数商 |
% | 取余 | 获取除法的余数 |
代码测试:
/*
算术运算符
*/
public class OperatorDemo01{
public static void main(String[] args){
//定义两个变量
int a = 7;
int b = 8;
System.out.println(a + b);
System.out.println(a - b);
System.out.println(a * b);
System.out.println(a / b);
System.out.println(a % b);
}
}
运行结果:
除法得到的是商,取余得到的是余数
整数相除只能得到整数,要想得到小数,必须有浮点数的参与
/*
算术运算符
*/
public class OperatorDemo01{
public static void main(String[] args){
//定义两个变量
int a = 7;
int b = 8;
System.out.println(a + b);
System.out.println(a - b);
System.out.println(a * b);
System.out.println(a / b);
System.out.println(a % b);
//浮点数参与
System.out.println(6.0 / 4);
}
}
运行结果:
字符的“+”操作
字符参与加法操作时是拿着字符再计算机底层对应的数值来进行计算的
代码测试:
/*
字符的“+”操作
*/
public class OperatorDemo02{
public static void main(String[] args){
//定义两个变量
int a = 10;
char c = 'A'; //字符'A'的值是65
System.out.println(a + c);
c = 'a'; //字符'a'的值是97
System.out.println(a + c);
c = '0'; //0与'0'不同 前者为int 后者为字符 字符'0'的值是48
System.out.println(a + c);
}
}
运行结果:
算术表达式中包含多个基本数据类型的值的时候,整个算术表达式的类型会自动提升。
提升规则:
·byte类型,short类型和char类型将被提升到int类型
·整个表达式的类型自动提升到表达式中最高等级操作数同样的类型
·等级顺序:byte,short,char→int→long→float→double
如果用一个char类型的变量获取a+c的值编译就会报错:
int a = 10;
char c = 'A';
char ch = a + c;
int提升double测试:
//int自动上升为double类型的
double d = 10 + 13.14;
System.out.println(d);
字符串的“+”操作
当“+”操作中出现字符串时,这个“+”时字符串连接符,而不是算术运算。
“Hello”+" "+666
当“+”操作中,如果出现了字符串,就是连接运算符,否则就是算术运算。当连续进行“+”操作时,从左到右逐个执行。
6+66+" "+“Test”
测试:
/*
字符串的“+”操作
*/
public class OperatorDemo03{
public static void main(String[] args){
System.out.println("Hello"+" "+"World!"); //字符串做“+”操作是拼接字符串
System.out.println("Hello"+" "+666); //字符串和int类型做“+”操作也是拼接字符串
System.out.println(666+" "+"Test"); //同上
System.out.println("Test"+6+66); //按顺序拼接
System.out.println(6+66+" "+"Test"); //先执行加法再拼接
}
}
输出:
赋值运算符
赋值运算符
符号 | 作用 | 说明 |
---|---|---|
= | 赋值 | a=10,将10赋值给变量a |
+= | 加后赋值 | a+=b |
-= | 减后赋值 | a-=b |
*= | 乘后赋值 | a*=b |
/= | 除后赋值 | a/=b |
%= | 取余后赋值 | a%=b |
扩展的赋值运算符隐含了强制类型转换
代码测试:
/*
赋值运算符
*/
public class OperatorDemo02{
public static void main(String[] args){
int a = 10; //把10赋值给a
System.out.println(a);
a += 20; //+= 把左边和右边的数据做加法操作 将结果赋值给左边 int类型等价于a = a + 20;
System.out.println(a);
short s = 10;
s +=20;
System.out.println(s);
//s = s + 20; //会报错,因为20是int类型的
s = (short)(s + 20); //扩展的赋值运算符底层蕴含了强制类型转换
System.out.println(s);
}
}
自增自减运算符
自增自减运算符
符号 | 作用 | 说明 |
---|---|---|
++ | 自增 | 变量的值加1 |
– | 自减 | 变量的值减1 |
·++和–既可以放在变量的后面,也可以放在变量的前面。
·单独使用的时候,无论前后结果都是一样的。
·参与操作的时候,如果放在变量的后面,先拿变量做操作,再自增自减。
·如果放在变量前面,则先自增或自减,然后拿变量做操作。
最常见的用法:单独使用
代码测试:
/*
自增自建运算符
*/
public class OperatorDemo04{
public static void main(String[] args){
int i = 10;
System.out.println(i);
i++; //单独使用
System.out.println(i);
int j = i++; //参与使用
System.out.println(i+" "+j); //++放在后面参与使用时,先把i的值赋给j,i再自增
j = ++i;
System.out.println(i+" "+j); //++放在前面参与使用时,i先自增,再把i的值赋给j
}
}
运行结果:
关系运算符
关系运算符
符号 | 说明 |
---|---|
== | a==b,判断a和b的值是否相等,成立为true,不成立为false |
!= | a!=b,判断a和b的值是否不相等,成立为true,不成立为false |
> | a>b,判断a是否大于b,成立为true,不成立为false |
>= | a>=b,判断a是否大于等于b,成立为true,不成立为false |
< | a<b,判断a是否小于b,成立为true,不成立为false |
<= | a<=b,判断a是否小于等于b,成立为true,不成立为false |
·关系运算符的结果都是boolean类型的,要么是true,要么是false。
·千万不要把“==”误写成“=”。
代码测试:
/*
自增自建运算符
*/
public class OperatorDemo04{
public static void main(String[] args){
int i = 10;
int j = 20;
int k = 10;
System.out.println(i==j);
System.out.println(i==k);
System.out.println("*******");
System.out.println(i!=j);
System.out.println(i!=k);
System.out.println("*******");
System.out.println(i>j);
System.out.println(i>k);
System.out.println("*******");
System.out.println(i>=j);
System.out.println(i>=k);
System.out.println("*******");
System.out.println(i<j);
System.out.println(i<k);
System.out.println("*******");
System.out.println(i<=j);
System.out.println(i<=k);
}
}
运行结果:
逻辑运算符
逻辑运算符概述
在数学中,一个数据x,大于3,小于6,我们可以这样来进行标识:3<x<6。
在java中,需要把上面的式子先进行拆解,再进行合并表达。
·拆解为:x>3和x<6
.合并后:x>3&&x<6
&&其实就是一个逻辑运算符。
我们可以这样说,逻辑运算符,是用来连接关系表达式的运算符。
当然,逻辑运算符也可以直接连接布尔类型的常量或者变量。
符号 | 作用 | 说明 |
---|---|---|
& | 逻辑与 | 有false则false |
| | 逻辑或 | 有true则true |
^ | 逻辑异或 | 不同为true |
! | 逻辑非 | false则为true,true则为false |
代码测试:
/*
逻辑运算符
*/
public class OperatorDemo04{
public static void main(String[] args){
int i = 10;
int j = 20;
int k = 30;
//& 有false则false
System.out.println((i>j)&(i<k)); //false & true
System.out.println((i>j)&(i>k)); //false & false
System.out.println((i<j)&(i<k)); //true & true
System.out.println((i<j)&(i>k)); //true & false
System.out.println("########");
//| 有true则true
System.out.println((i>j)|(i<k)); //false | true
System.out.println((i>j)|(i>k)); //false | false
System.out.println((i<j)|(i<k)); //true | true
System.out.println((i<j)|(i>k)); //true | false
System.out.println("########");
//^ 不同为true
System.out.println((i>j)^(i<k)); //false ^ true
System.out.println((i>j)^(i>k)); //false ^ false
System.out.println((i<j)^(i<k)); //true ^ true
System.out.println((i<j)^(i>k)); //true ^ false
System.out.println("########");
//! 非
System.out.println((i>j)); //false
System.out.println(!(i>j)); //!false
System.out.println(!!(i>j)); //!!false
System.out.println(!!!(i>j)); //!!!false
}
}
输出结果:
短路运算符
符号 | 作用 | 说明 |
---|---|---|
&& | 短路与 | 和&相同,但有短路效果 |
|| | 短路或 | 和|相同,但有短路效果 |
·&:无论结果如何,左右都会执行
·&&:只有左边为真,才会向下执行
·|:无论结果如何,左右都会执行
·||:如果遇到真,就会停止执行
最常见的逻辑运算符:&&、||、!
代码测试:
/*
短路逻辑运算符
*/
public class OperatorDemo04{
public static void main(String[] args){
int i = 10;
int j = 20;
int k = 30;
//&& 有false则false
System.out.println((i>j)&&(i<k)); //false && true
System.out.println((i>j)&&(i>k)); //false && false
System.out.println((i<j)&&(i<k)); //true && true
System.out.println((i<j)&&(i>k)); //true && false
System.out.println("########");
//|| 有true则true
System.out.println((i>j)||(i<k)); //false || true
System.out.println((i>j)||(i>k)); //false || false
System.out.println((i<j)||(i<k)); //true || true
System.out.println((i<j)||(i>k)); //true || false
System.out.println("########");
//逻辑与或和短路与或表达逻辑时一致的
System.out.println((i++>100)&(j++>100)); //j++运行了 逻辑与会判断全部逻辑
System.out.println("i:"+i+",j:"+j);
System.out.println((i++>100)&&(j++>100)); //j++没有运行 因为短路与条件失败就会停止运行
System.out.println("i:"+i+",j:"+j);
}
}
输出结果:
三元运算符
三元运算符
·格式:关系表达式?结果1:结果2
·范例:a>b?c:d
·计算规则:
首先计算关系表达式的值
如果值为true,则结果1为三元运算的结果
如果值为false,则结果2为三元运算的结果
代码测试:
/*
三元运算符
*/
public class OperatorDemo04{
public static void main(String[] args){
int i = 10;
int j = 20;
String res = new String();
res = i > j ? "i大与j" : "i小于j";
System.out.println(res);
}
}
运行结果: