+(正数,加号,连接符)
连接符:数据与字符使用+,此时+作为一个连接符,拼接字符串。任何数据与字符串使用连接符,结果类型为字符串类型。
注意:计算机每次只能运算一个+
System.out.println(1+2+3+"hello"+1+2+3);//输出6hello123
-(减号)
*(乘号)
/(除号)默认取整
%(取模,取余数)取模运算结果正负取决于被除数的正负
System.out.println(10%3);//1
System.out.println(10%(-3));//1
System.out.println((-10)%3);//-1
System.out.println((-10)%(-3));//-1
++(自增)- -(自减)
应用场景:
1)单独使用:不管是++或者–在数据前还是数据后都是自增1或者自减1
2)参与运算使用:
a:++,- -在数据的前面,先自增1或者自减1,然后在运算(赋值)
b:++,- -在数据的后面.先运算(先赋值),然后自增1或者自减1
练习:
/*
* 1 : int a = 10;
int b = 10;
int c = 10;
a = b++;
c = --a;
b = ++a;
a = c--;
请分别计算出a,b,c的值
2:int x = 4;
int y = (x++)+(++x)+(x*10);
分别求出x和y的值
* */
public class OperatorTest {
public static void main(String[] args) {
int a = 10;
int b = 10;
int c = 10;
a = b++;//a=10 ,b=11 c=10
c = --a;//a=9 ,b=11,c=9
b = ++a;//a=10,b=10, c=9
a = c--;// a=9, b=10,c=8
System.out.println("a:"+a);
System.out.println("b:"+b);
System.out.println("c:"+c);
System.out.println("-----------------------");
int x = 4;
int y = (x++)+(++x)+(x*10);
//x = 4,5,6
//y = 4 + 6 + (6*10)
System.out.println("x:"+x);
System.out.println("y:"+y);
}
}
=(赋值运算符)
拓展的赋值运算符:
+=
表达的意思:将当前符号右边的数据和左边的数据相加赋值给左边的数据
-=
*=
/=
%=
对于扩展的赋值运算符:隐藏了默认的强制类型转换
例如:
/*
* 面试题:
short s=1;
s = s+1;
short s=1;
s+=1;
上面两个代码有没有问题,如果有,哪里有问题。
* */
public class OperatorTest {
public static void main(String[] args) {
//定义变量
// short s = 1 ;
// s = (short) (s + 1) ;
short s = 1 ;
s += 1 ;
System.out.println(s);
}
}
符号连接的表达式结果都是boolean类型
== 作用:
1.用于基本数据类型数据比较时,判断两个数据是否相等;
2.用于引用数据类型比较时,比较的是两个变量所指向的对象是否为同一个(比较的是内存地址)
!= (不等于)
< (小于)
< (大于)
<= (小于等于)
>= (大于等于)
主要作用是用于连接布尔表达式的
& (与) 两边都true,才true
| (或) 一边为true,就为true
! (非) true边false,false边true
^ (异或) 两边不同为true,相同为false
&&(短路与)
||(短路或)
逻辑双与&&和逻辑单与& 的区别 (逻辑双或||和逻辑单或|):
相同点:结果相同
不同点:
使用&&时,若左边为false,则不会运算右边布尔表达式,直接返回false;
使用||时,若左边为true,则不会运算右边布尔表达式,直接返回true
使用位运算符时,将1看为true,将0看为false
&(位与)
|(位或)
^(位异或)
位异或的一个特点:一个数据被另一个数据位异或两次,结果是该数据本身
~(取反)
public class OperatorDemo {
public static void main(String[] args) {
//位运算符
System.out.println(3 & 4);
System.out.println(3 | 4);
System.out.println(3 ^ 4);//(位异或:重点)
System.out.println(~3);
}
}
/*
* 计算出int类型3和4对应的二进制数据
* 00000000 00000000 00000000 00000011
* 00000000 00000000 00000000 00000100
*位与:&
* 特点:有0则0
* 00000000 00000000 00000000 00000011
* 位与&:00000000 00000000 00000000 00000100
* -------------------------------------------------------
* 结果: 00000000 00000000 00000000 00000000
* 0
* 位或|:
* 特点:有1,则1
* 00000000 00000000 00000000 00000011
* 位与|:00000000 00000000 00000000 00000100
* -------------------------------------------------------
* 00000000 00000000 00000000 00000111
* 结果:7
*
* 位异或:^
* 特点:相同则为0,不同则为1
* 00000000 00000000 00000000 00000011
* 位与^:00000000 00000000 00000000 00000100
* ------------------------------------------------------
* 00000000 00000000 00000000 00000111
* 结果:7
*
* 反码:~:特点:按位取反(底层对补码进行按位取反)
* 00000000 00000000 00000000 00000011 原码,反,补
* ~ --------------------------------------------------
*
* 最高符号位 数值位
* 1 1111111 11111111 11111111 11111100(补码)--->原码
* -1
* 1 1111111 11111111 11111111 11111011 --->反码
* 1 0000000 00000000 00000000 00000100
* - 4
*
* 结果:-4
* */
<<(左移) 最左边的最高符号为丢弃,右边补齐0
规律:一个操作数进行左移运算时,等于该操作数乘以2的n次方,n是移动的位数
>>(右移) 最高符号位为0,左边补0,最高符号位为1,左边补齐1
规律:一个操作数右移时,等于该操作数除以2的n次方,n是移动的位数
>>>(无符号右移) 不管最高符号位是0还是1,左边补齐0
格式:
(表达式)? true的结果 : false的结果;
执行流程:
如果表达式成立,执行true的结果;
如果表达式不成立,执行false的结果;
public class OperatorDemo {
public static void main(String[] args) {
//求两个数据是否相等
int a = 100;
int b = 200 ;
//用三元运算符实现
// boolean flag = (a==b) ? true : false;//==表示两个数据进行比较
// System.out.println("flag:"+flag);
//优化改进
boolean flag = a==b ;
System.out.println(flag);
//求两个数据中的最大值
//先定义变量max
int max = (a>b) ? a : b ;
System.out.println("两个数据中的最大值是:"+max);
System.out.println("-----------------------");
//求三个数据中的最大值
int m = 10 ;
int n = 50 ;
int z = 20 ;
//可以使用中间第三方变量进行实现,实际开发中就使用第三方进行实现
// int temp = (m>n) ? m : n ;
// //定义max2
// int max2 = (temp > z) ? temp : z ;
//一步走:
int max2 = (m>n) ? ((m>z)? m: z) : ((n>z)? n: z) ;//不建议使用
System.out.println("三个数据中的最大值是:"+max2);
}
}
步骤:
A:创建键盘录入对象:Scanner类: java.util包下的类
固定格式:
sc:对象名
Scanner sc = new Scanner(System.in); //实质还是通过IO流实现的(java高级特性)
B:导包:位置:class和package中间
import java.util.Scanner;
C:录入数据:使用对象名调用方法
int a = sc.nextInt();
D:输出
package _11.org.westos_键盘录入;
import java.util.Scanner;
//导包:import java.util.Scanner;快捷键:ctrl+shift+o
/*
*
键盘录入两个数据,并对这两个数据求和,输出其结果
* */
public class ScannerTest {
public static void main(String[] args) {
//1)创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//2)录入数据
//提示
System.out.println("请输入第一个数据:");
int firstNumber = sc.nextInt() ;
System.out.println("请输入第二个数据:");
int secondNumber = sc.nextInt() ;
//定义个最终变量
int result = firstNumber + secondNumber ;
System.out.println("result:"+result);
}
}