JAVA学习第四课 运算符
接上节。。。
运算符

二元运算符(有两个操作数)
一元运算符(有一个操作数)
1.算数运算符(+,-,*,/)(除法取商)
整数运算:
1)如果两个操作数有一个为long,则结果也为long。
2)没有long时,结果为int。即使操作数全为short,byte,结果也是int。
浮点运算:
3)如果两个操作数有一个为double,则结果为double
4)只有两个操作数都是float,结果才是float
byte a = 1; int b = 2; //byte c = a + b; int不能转为byte long b2 = 3; //int c2 = b2 + b; //也不可以 float f1 = 3.14F; double d = b + b2;//可以 float e = b + b2; //表数范围较大的话可以转类型 //float d2 = f1 + 6.2;//不可以
2.取模运算(%)(取余数)
1)其操作数可以为浮点型,一般使用整数,结果是“余数”,“余数”符号和左边操作数相同(如 7%3=1,-7%3=-1,7%-3=1)
System.out.println(-9%5);
System.out.println(9%5);
3.自增自减(++,--)
自增自减没啥说的,只要注意i++先返回i再++,++i先++再返回i,--同理
4.赋值及其扩展运算符 (+=,-=,*=,/=,%=)
int aaa = 2; int bbb = 3; aaa *= bbb + 3; // 等价于 aaa = aaa*(bbb+3)
5.关系运算符(==,!=,>,<,>=,<=)(结果都是true或者false)
1)=是赋值运算符,不是关系运算符
2)==,!=是所有(基本类型和引用类型)都可以使用的
3)>, <, >=, <=仅针对数值类型(byte/short/int/long,float/double,char)
int inn = 3;
int inns = 4;
System.out.println(inn >= inns);
System.out.println('a' >= 'b');
6.逻辑运算符(&, |, !, ^, &&, ||)(逻辑与,逻辑或,逻辑非,逻辑异或,短路与,短路或)
逻辑运算的操作数和运算结果都是boolean值
1)逻辑与(&):两个都是true才是true
2)逻辑或(|):两个中有一个是true就是true
3)逻辑非(!):取反
4)逻辑异或(^):相同为false,不同为true
5)短路与(&&):只要有一个是false,就直接返回false
6)短路或(||):只要有一个为true,就直接返回true
1 //测试短路与和或 2 // int n = 3/0; 3 4 // boolean e3 = 1>2&2<(3/0); 5 // System.out.println(e3); 6 7 // boolean e33 = 1>2&&2<(3/0); 8 // System.out.println(e33);
7.位运算符
1)~:取反(1变成0,0变成1)
2)&:按位与(都是1才是1)
3)|:按位或(有一个是1就是1)
4)^:按位异或(相同为0,不同为1)
5)<<:左移运算符(左移一位相当于乘2)
6)>>:右移运算符(右移一位相当于除以2)
1 int ax = 3*2*2; 2 int bx = 3<<2; //等价于ax 3 int cx = 12/2/2; 4 int dx = 12>>2;//等价于cx 5 System.out.println(~3);
8.字符串连接符(+)
1)字符串是对象,不是基本数据类型
2)加号两边有一个是字符串,那么这个+就是连接符
1 System.out.println("1"+1); //11 2 System.out.println('s'+1); //116 3 System.out.println('1'+1); //50 4 5 String str = "3"; 6 int stra = 3; 7 int strb = 4; 8 System.out.println(str+stra+strb); //334 9 System.out.println(stra+strb+str); //73
9.条件运算符(三目运算符: x ? y : z)
1 int score = 80; 2 int xa = -100; 3 String type = score < 60 ? "不及格" : "及格"; 4 String xxa = xa > 0 ? "大于0" : (xa == 0 ? "等于0" : "不等于0"); 5 System.out.println(type); 6 System.out.println(xxa);
10.运算符优先级(直接看图吧)


11.自动类型转化
1)自动类型转化是容量小的数据类型可以自动转换为容量大的数据类型(容量小不是占的字节数小,是表数范围)
2) 可以将整型常量直接赋值给byte、 short、 char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围即可。
黑色的实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的损失。

1 int asf = 1; 2 double sag = asf; 3 long lll = asf; 4 5 // 可以将整型常量直接赋值给byte、 short、 char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围即可。 6 short bsag = 12; //合法 7 //short basgasg = 1234567;//非法,1234567超出了short的表数范围 8 9 //long eee = 3.23F; //不可以转化 10 float eee = 2324242L; 11 12 //特例 13 byte uuu = 123; //可以 14 //byte uuuu = 1230; //不可以,超过了表数范围
12.强制类型转化 ((type) var)(可能会精度丢失)
double xx = 3.14;
int nx = (int)xx;
char csf = 'a';
int dddd = csf + 1;
System.out.println(nx);
System.out.println(dddd);
System.out.println((char)dddd);
13.类型转化时容易发生的问题
1)操作比较大的数时,要留意是否溢出
2)long类型结尾最好用L,不用小写的l,一面、、以免混淆
1 int money = 1000000000; //10亿 2 int years = 20; 3 //返回的total是负数,超过了int的范围 4 int total = money*years; 5 System.out.println("total="+total); 6 //返回的total仍然是负数。默认是int,因此结果会转成int值,再转成long。但是已经发生//了数据丢失 7 long total1 = money*years; 8 System.out.println("total1="+total1); 9 //返回的total2正确:先将一个因子变成long,整个表达式发生提升。全部用long来计算。 10 long total2 = money*((long)years); 11 System.out.println("total2="+total2); 12 13 14 long total3 = 213124 * 21453215 * 1235236; 15 //total3直接算会溢出可以把一个值转换成long 16 long total4 = 213124L * 21453215 * 1235236;
14.使用Scanner获得键盘输入(开头要import java.util.Scanner)
1 Scanner scanner = new Scanner(System.in/*io流对象*/); 2 System.out.println("请输入名字:"); 3 String name = scanner.nextLine(); 4 System.out.println("请输入你的爱好:"); 5 String favor = scanner.nextLine(); 6 System.out.println("请输入你的年龄:"); 7 int age = scanner.nextInt(); 8 9 System.out.println("============================"); 10 System.out.println(name); 11 System.out.println(favor); 12 System.out.println(age);

浙公网安备 33010602011771号