运算符
Java语言支持如下运算符:
-
算术运算符:+,-,*,/,%,++,--
-
赋值运算符:=
-
关系运算符:>,<,>=,<=,==,!=,instanceof
-
逻辑运算符:&&,||,!
-
==========会上面的就差不多了============
-
位运算符:&,|,^,~,>>,<<,>>>
-
条件运算符:?:
-
扩展赋值运算符:+=,-=,*=,/=
二元运算符:
(两个数字进行运算就叫二元运算符)
//二元运算符(需要两个数字才行) //Ctrl + D : 复制当前行到下一行 int a = 10; int b = 20; int c = 25; int d = 25; System.out.println(a+b); System.out.println(a-b); System.out.println(a*b); System.out.println(a/b); //输出发现 : 前三个正常,但是第四个输出等于 0 , //分析 : abcd都是int类型,在10/20时会得到0.5 //int类型是整形,只能有整数,所以0.5取整=0, //也可以进行强制类型转换,转换为double,就可以得到0.5, //如下 : System.out.println((double) a/b); System.out.println("===============================");
运算数据类型转换
long a = 123123123123123L; int b = 123; short c = 10; byte d = 8; System.out.println(a+b+c+d); System.out.println(b+c+d); System.out.println(c+d); //输出发现:第一个仍然是Long类型, // 第二个变成了Int类型, // 第三个变成了Int类型, //原因:有Long类型的赋值,其他在和该Long类型变量进行运算时,默认运算结果类型也为Long // 运算时有一个类型是Long,那么结果类型也是Long // 如果没有Long,那么其结果都为Int,无论是否有Int类型,其结果都为Int //System.out.println((String) (c+d)); //如果按上面的来输出,会发现无法转换为 String 类型, //报错显示:不能把 Int 类型转换为 String 类型,侧面说明了这个(c+d)就是 Int类型 //而c和d没有一个是 Int类型,说明没有Long,输出全部都是Int,有Long,输出全部都是Long //小知识:cast :转换
关系运算符:
//关系运算符:>,<,>=,<=,==,!=,instanceof // 关系运算符返回的结果只有: (true)正确,(false)错误 用布尔值来表示 int a = 10; int b = 20; System.out.println(a>b); System.out.println(a<b); System.out.println(a==b); System.out.println(a!=b);//!=就是不等于 //===================================================== //===================================================== //===================================================== //取模:(%) 实际就是取余数(取余),也叫 模运算 int c = 21; int d = 22; System.out.println(c%a);//输出结果为1,即21/10余1 System.out.println(d%a);//输出结果为2,即22/10余2
一元运算符:
(只有一个数字的运算)
//++ -- 自增 自减 ,一元运算符(只需要一个数就足够) int a = 3; int b = a++; // a++ <==> a = a + 1 /*a的值为3+1+1,过程: a=3——>a++——>先给b赋值为a=3, 然后再a+1=4,此时a=4,b=3 */ int c = ++a; // ++a <==> a = a + 1 /*a的值为3+1+1,过程: a=3——>a++——>先给b赋值为a=3, 然后再a+1=4,此时a=4,b=3 */ //意思一样,但是执行+1的时机不同 System.out.println(a);//输出了5 System.out.println(b);//输出了3 System.out.println(c);//输出了5 //面试题:a+++++b //a++ 加上 ++b。 //幂运算:2^3=8,但是Java里没有 ^ 这种表示方法,需要用到一个数学类 double pow = Math.pow(2, 3);//输入Math,然后输个 . ,然后会点出很多,比如abs就是绝对值,max就是最大数等等 //乘方所对应的类就是pow System.out.println(pow); //输出了8.0,即2^3=8。
逻辑运算符:
//与(and):+(&&) 或(or):+(||) 非(取反):+!(&&) boolean a = true; boolean b = false; System.out.println("a && b:"+(a&&b));//逻辑与运算:两个变量都为真,结果才为真 System.out.println("a || b:"+(a||b));//逻辑或运算:两个变量有一个为真,则结果就是真(两个变量都是假,结果才为假) System.out.println("!a && b:"+!(a&&b));//逻辑非运算:真变假,假变真(取反) System.out.println("========================================"); System.out.println("========================================"); //短路运算: int c = 5; boolean d = (c<4)&&(c++<4); System.out.println(d);//false System.out.println(c);//c = 5,c没有变成6,说明没有执行c++。 /* * 如: * 在判断逻辑或运算时: * c<4和c++<4里c<4已经是假了,就可以不判断c++<4是真是假(短路), * 直接会输出布尔值 * */
位运算符:
特点:效率高!!!!
/* A = 0011 1100 B = 0000 1101 ------------------------------------------------------------------ ------------------------------------------------------------------ A&B 0000 1100(联系上节课的逻辑运算:与,两个结果都是真,结果才是真,都是1,结果为1,如果有一个0,结果为0) A|B 0011 1101(联系上节课的逻辑运算:或,两个结果都是假,结果才是假,都为0,结果为0,如果有一个1,结果为1) A^B 0011 0001(联系上节课的逻辑运算:非,两个结果相同,则为0,两个结果不相同,则为1) ~B 1111 0010(联系上节课的逻辑运算:取反,0变1,1变0) */ //面试题: /* 我们都知道:2*8 = 16 但是计算机不知道,问:如何计算最快? 解:(一般人这样2*2*2*2)这样很慢,计算机在其底层要做很多的事情,因为计算机下面都是电路(计算机是不会乘除法的,都是加法) 但是在位运算里可以变得非常快,在位运算里只需要改变灯亮,改变计算机的高低电路就可以 位运算符: << , >> ,这两个是左移和右移的意思(箭头指向那边就是往哪边移) */ System.out.println(2<<3); //此时发现2左移三位等于16 /*在二进制里: 0000 0000 = 0 0000 0001 = 1 0000 0010 = 2 0000 0100 = 4 0000 1000 = 8 0001 0000 = 16 0010 0000 = 32 ...... 此时会很清楚的发现,把1往左移动1位置,结果乘2 故: 在位运算里(二进制) 左移:乘2 右移:除二 */ //位运算的好处:效率高! //位运算的好处:效率高! //位运算的好处:效率高! //因为位运算是和二进制打交道的,可以用来做很多精巧快速的东西
拓展赋值运算符:(偷懒运算符)
int a = 10; int b = 20; a+=b; //a = a + b; a-=b; //a = a - b; System.out.println(a); //也叫偷懒运算符 // ===================================================== //字符串连接符: + , String System.out.println(a+b); System.out.println(""+a+b); System.out.println(a+b+""); //如果在前面,那么后面会拼接,如果字符串在后面,那么他依旧会运算。 //所以 + 号除了加减,还有连接的作用
三元运算符:
//三元运算符: //a?b:c; //意思是若a==b,则结果为b,若a不等于b,则结果为c,类似: // if(a==b); //sout("b"); // x?y:z //如果x==true,则结果为y,否则结果为z int score = 80; String type = score<60?"不及格":"及格"; System.out.println(type);