1.运算符
* 对常量和变量进行操作的符号称作运算符
* 2.表达式
* 用运算符把常量或者变量连接起来的符合java语法的式子就可以称为表达式。不同运算符连接的式子体现的是不同类型的表达式。
* 定义两个int类型的变量a,b,做法(a+b)
* 注意:单个变量或者常量也可以是称作表达式,如变量a,true,10,2.50等等。(可以理解为0+变量或者常量=变量或者常量)
* 3.常用运算符
* 算术运算符
* 赋值运算符
* 关系运算符
* 三元运算符
* 逻辑运算符
*
* ①:算术运算符:+ ,— ,* ,/ (加减乘除)的基本使用,注意整数相除只能得到整数
* ②:%求余运算符。得到的是两个相除数据的余数
* ③:/除法运算符。若是两个整数相除得到的是两个相除数据的商。
* 简单来讲:一个是除法运算符,一个是求余运算符,但是前者有特殊情况,即在两个整数相除时,是相当于求商运算符。后者无论是否相除数据均为整数,都将求余,若有浮点数,则求余结果也为浮点数。例子:
System.out.println(3/4);//求商为0
System.out.println(3%4);//求余为3
System.out.println(3%4.0);//求余为3.0
* 求余概念:就是当商出来时,所余下的数,有点抽象,
* 例子说明。15%4,即15-3*4=3,其中第一个3为商,(因为4*4=16不符合),第二个3为余。
* 25%6,即25-4*6=1,其中4为商,(因为5*6=30不符合),1就是余数!
* ④:+运算符:
* a:不仅可以数值类型进行相加,字符类型也可以进行相加,其本质是拿字符在计算机中存储的数据值来参与运算的。
* 'A' 65
* 'B' 66
* 'a' 97
* '0' 48
* 从这些就可以往后以此类推了
* b:字符串参与加法运算,本质就是字符串的拼接。
*
*
* 4.常见例子:
* / 和%分别是求商和求余(一般数据均整数)
* 求百位:189/100
* 求十位:189/10=18,18%10=8
* 求个位:189%10=9
* 以此类推四位、五位数....
*
* 5.++、--运算符:自增自减,用于对变量进行加1,或者减1 的操作
* ++,--既可以用在变量的前面,也可以用在变量的后面,但是有时候效果是不一样的。
* 注意:单独使用的时候,++,--放在变量的前面或者后面结果一样。
* 本质: 先运算再自增:++在后,先使用之前的变量值,而后这个变量再+1
* 先自增再运算:++再前,将之前的变量值+1,而后再去使用。
* 例子:
int a=10;
System.out.println("a:"+a);
//++
a++;
System.out.println("a:"+a);
++a;
System.out.println("a:"+a);
//--
a--;
System.out.println("a:"+a);
// -------------------------------
System.out.println("-----------------");
int b=a;
System.out.println("b:"+b);
int c=a++;//这一步过后a+1即a为11,但是c还是10
System.out.println("c:"+c);
int d=++a;//这一步时a+1即a为12,d也为12
System.out.println("d:"+d);
int e=a--;//这一步过后a-1即a为11,但是e还是12
System.out.println("e:"+e);
int f=--a;//这一步时a-1即a为10,f也为10
System.out.println("f:"+f);
* 6.赋值运算符:
* 基本赋值运算符:=
* 扩展赋值运算符:+=,—=,*=,/=等等(隐含强制类型转换规则)
* 例子
int a=10;//严格叫法:把10数值赋值给int类型的变量a
System.out.println("a:"+a);
System.out.println("---扩展运算符小例子-----------------------------");
a+=20;//a=a+20;以此类推
System.out.println("a:"+a);
a*=20;
System.out.println("a"+a);
a/=100;
System.out.println("a"+a);
a-=5;
System.out.println("a"+a);
//扩展:扩展的赋值运算符,隐含了强制类型转换
//a+=10:相当于:a=(a的数据类型)(a+10)
byte s=127;
s+=1;
System.out.println("s:"+s);//128超越byte最大数值127,进行强制转换后损失精度变成,最终输出-128
*
* 7.关系运算符:
* ==,!=,>=,<=,>,< 结果是布尔类型boolean
* 例子:
int a=10;
int b=20;
int c=10;
//==
System.out.println(a==b);//false
System.out.println(a!=b);//true
System.out.println(a>=b);//false
System.out.println(a<=b);//true
System.out.println(a==c);//true
* 8.逻辑运算符:
* 用于连接关系表达式(a>b,a==b,a<=b等等就是关系表达式,因为有关系运算符)
* &,|,^,!(与、或、逻辑异或、非)
* &&,||(双与,双或)
* 双与、双或:有短路效果,因为左边为false,则右边不执行。但是单与无论左边是啥 右边都会执行
* 例子:
int a=3;
int b=4;
int c=5;
//单与& 有一个是false则false
System.out.println((a>b)&(a>c));//f&f--f
System.out.println((a>b)&(a<c));//f&t--f
System.out.println((a<b)&(a>c));//t&f--f
System.out.println((a<b)&(a<c));//t&t--t
System.out.println("----------------");
//或| 有一个是true则true
System.out.println((a>b)|(a>c));//f&f--f
System.out.println((a>b)|(a<c));//f&t--t
System.out.println((a<b)|(a>c));//t&f--t
System.out.println((a<b)|(a<c));//t&t--t
System.out.println("-----------------");
//逻辑异或^ 相反就true,相同就是false
System.out.println((a>b)^(a>c));//f&f--f
System.out.println((a>b)^(a<c));//f&t--t
System.out.println((a<b)^(a>c));//t&f--t
System.out.println((a<b)^(a<c));//t&t--t
System.out.println("----------");
//非 ! 将false-true互换
System.out.println((a>b));//false
System.out.println(!(a>b));//true
System.out.println((a==b));//false
System.out.println(!(a==b));//true
System.out.println("------难点-----------");
//双与&& 与单与结果一样,即有一个是false则false。但是双与有一个短路的效果,因为左边为false则右边不执行(切记是false,若左边是true,则没有短路效果!)
System.out.println((a>b)&&(a>c));//f&f--f
System.out.println((a>b)&&(a<c));//f&t--f
System.out.println((a<b)&&(a>c));//t&f--f
System.out.println((a<b)&&(a<c));//t&t--t
System.out.println("-------------------");
int x=10;
int y=20;
System.out.println((x++>10)&(y++>30));//f&f-f,x此时为10,这条语句过后为11,y此时为20,这条过后为21
System.out.println("x:"+x);//11
System.out.println("y:"+y);//21
System.out.println("BUT---短路--------");
System.out.println((x++>11)&&(y++>20));//f&f-f,x此时为11,这条过后为12,y此时为21,且短路,则y过后还是21.
System.out.println("x:"+x);//12
System.out.println("y:"+y);//21
System.out.println("-------难点---------");
//双或|| 与单或结果一样,即 有一个是true则true。但是双或也有短路效果,因为左边为true则右边不执行(切记是true,若左边是false,则没有短路效果!)
System.out.println((a>b)||(a>c));//f&f--f
System.out.println((a>b)||(a<c));//f&t--t
System.out.println((a<b)||(a>c));//t&f--t
System.out.println((a<b)||(a<c));//t&t--t
System.out.println("--------------------");
int p=10;
int o=20;
System.out.println((p++>10)|(o++>20));//f&f-f,此时p为10,这条过后为11,此时o为20,这条过后为21.
System.out.println("p:"+p);//11
System.out.println("o:"+o);//21
System.out.println("-----BUT----短路----");
System.out.println((p++>5)||(o++>20));//此时p为11,这条过后为12,由于true,则直接短路,后面o还是原来数值,即o还是为21.
System.out.println("p:"+p);//12
System.out.println("o:"+o);//21
*
* 9.三元表达式
* 格式: (关系表达式)?表达式1:表达式2
* 关系表达式是true则返回表达式1,false则返回表达式2,注意表达式的定义,上文有提到。
* 例子:
int a=10;
int b=22;
int c=(a==b)?a:b;
System.out.println("c:"+c);//输出表达式2的值,即b的值,即输出12
int d=(a!=b)?a:b;
System.out.println("d:"+d);//输出表达式1的值,即a的值,即输出10
* 10.练习
* ①使用三元表达式判断是否相同
* ②.直接定义三个变量求三个数中的最大值
* ③.使用Scanner类使得可以键盘输入两个数,判断是否相等
* ④.使用Scanner类使得可以键盘输入三个数, 求出最大值、
* 注意:Scanner 键盘输入数据的使用步骤:
* A:导包(直接用Scanner sc=new Scanner(System.in)然后eclipse会报错,再使用快捷键ctrl+shift+o快捷导包)
* import java.util.Scanner;
* B:创建键盘录入对象
* Scanner sc=new Scanner(System.in);
* C:接收数据
* int i=sc.nextInt();//sc对象调用内置方法,即此表达式的意思是键盘输入的整数会赋值给i代码如下:
//判断两个整数相同吗
int a=10;
int b=20;
boolean flage=(a==b)?true:false;
System.out.println(flage);//相同返回true 不同返回false
//求三个数中最大值
int x=10;
int y=20;
int z=15;
int middle=(x>=y)?x:y;
int max=(middle>=z)?middle:z;
System.out.println("max:"+max);
//键盘输入,程序灵活
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个数据:");
int k=sc.nextInt();
System.out.println("k:"+k);
//键盘输入两个数,并对其判断是否相等且求和
System.out.println("请输入数据q:");
int q=sc.nextInt();
System.out.println("请输入数据w:");
int w=sc.nextInt();
boolean flage1=(q==w)?true:false;
System.out.println("q与w相等:"+flage1);
System.out.println("q与w求和为:"+(q+w));
//键盘输入三个数据,求其最大值
System.out.println("请输入数据r:");
int r=sc.nextInt();
System.out.println("请输入数据t:");
int t=sc.nextInt();
System.out.println("请输入数据u:");
int u=sc.nextInt();
int m=(r>=t)?r:t;
int ma=(m>=u)?m:u;
System.out.println("最大值为:"+ma);
* */