一、运算符概念

运算符是一些特殊的符号,主要用于数学函数、一些类型的赋值语句和逻辑比较方面。Java中提供了丰富的运算符,如赋值运算符、算数运算符、比较运算符、三元运算符等。。

1、算数运算符

1.1、Java中的算数运算符主要有+(加)、-(减)、*(乘以)、/(除以)、%(求余),他们都是二元运算符,Java中算数运算符的功能及使用方式如下表

运算符

说明

实例

结果

+


12.45f+15

27.45

-


4.56-0.16

4.4

*

乘以

5L*12.45f

62.25

/

除以

7/2

3

%

取余数

12%10

2

 

public class OperatorDemo {
	public static void main(String[] args) {
		// 定义两个变量
		int a = 3;
		int b = 4;

		System.out.println(a + b);
		System.out.println(a - b);
		System.out.println(a * b);
		System.out.println(a / b);

		// 整数相除只能得到整数,要想得到小数,就必须有浮点数参与运算
		System.out.println(3 / 4.0);
		System.out.println(3.0 / 4);
	}
}

注意:其中,+ 和 - 运算符还可以作为数据的正负符号,如+5、-7。

           在进行除法运算时,0不能做除数,否则系统会抛出:java.lang.ArithmeticException异常。

1.2、算数运算符取余和除法的区别

%:取余运算符,得到的是两个相除数据的余数。常用场景:判断两个数据是否能整除。

/:除法运算符,得到的是两个数据相除的商。

public class OperatorDemo2 {
	public static void main(String[] args) {
		int a = 5;
		int b = 3;

		System.out.println(a / b);//结果1
		System.out.println(a % b);//结果2
	}
}

1.3、字符和字符串参与加法操作

字符串参与运算,其实是拿该字符串的数值来操作

    a ----- 97

    A ----- 65

    0 ------ 48

字符串参与运算,这里其实做的不是加法运算,而是字符串的拼接。字符串和其他类型的数据做拼接,结果是字符串类型的。

public class OperatorDemo3 {
	public static void main(String[] args) {
		// 整数加法
		int a = 10;
		int b = 20;
		System.out.println(a + b);//结果30
		System.out.println("------------------");

		// 字符参与加法操作
		char c = '0';
		char c2 = 'a';
		System.out.println(a + c);//结果58
		System.out.println(a + c2);//结果107
		System.out.println("------------------");

		// 字符串参与加法操作
		System.out.println("hello" + a);//结果hello10
		System.out.println("hello" + a + b); // "hello"+10,然后再和b进行拼接,结果hello1020
		System.out.println(a + b + "hello");//结果30hello
	}
}

1.4、自增和自减运算符

自增、自减运算符是单目运算符,可以放在操作元之前,也可以放在操作元之后。操作元必须是一个整型或浮点型变量。自增、自减运算符的作用是使变量的值增1或减1.放在操作元前面的自增、自减运算符,会先将变量的值加1(减1),然后再使该变量参与表达式的运算。放在操作元后面的自增、自减运算符,会先使变量参与表达式的运算,然后再将该变量加1(减1)。

/*
		 * ++a(--a)			表示在使用变量a之前,先使a的值加(减)1
		 * a++(a--)			表示在使用变量a之后,使a的值加(减)1
		 *  粗略地分析,++a与a++的作用都相当于a = a + 1.假设 a = 4;则:
		 * b = ++ a;		先将a的值加1,然后赋值给b,此时a值为5,b值为5
		 *  再看另外一个语法,同样假设a = 4;则:
		 * b = a ++;		先将a的值赋值给b,再将a的值变为5,此时a值为5,b值为4  
		 */

1.5、赋值运算符

a、分类:

              基本的赋值运算符:=

              扩展的赋值运算符:+=、-=、*=、/=、%=

注:+=:a += 20;相当于a = (a的数据类型)(a + 20);

/*
 * 赋值运算符:
 * 		A:基本	=
 * 		B:扩展	+=,-=,*=,...
 * 
 * +=:
 * 		a+=20;
 * 		相当于
 * 		a = (a的数据类型)(a + 20);
 */
public class OperatorDemo {
	public static void main(String[] args) {
		// 把10赋值给int类型的变量a
		int a = 10;

		// += 把左边和右边的数据进行运算,最后赋值给左边。左边的只能是变量
		a += 10;// 相当于a = a + 10
		System.out.println("a:" + a);//结果a:20
		System.out.println("----------------------");

		short s = 10;
		// s += 20; // 相当于 s = s + 20;
		s = (short) (s + 20);
		System.out.println("s:" + s);//结果s:30
	}
}

1.6、关系运算符

关系运算符属于二元运算符,用于程序中的变量之间、变量和自变量之间以及其他类型的信息之间的比较。比较运算符的运算结果是boolean型。当运算符对应的关系成立时,运算结果为true,否则为false。所有关系运算符通常作为判断的依据用在条件语句中。关系运算符共有6个。见下表....

关系运算符

运算符

作用

举例

操作数据

结果

>

比较左方是否大于右方

'a' > 'b'

整型、浮点型、字符型

false

<

比较左方是否小于右方

156 < 456

整型、浮点型、字符型

true

==

比较左方是否等于右方

'c' == 'c'

基本数据类型

true

>=

比较左方是否大于等于右方

479 <= 426

整型、浮点型、字符型

true

<=

比较左方是否小于等于右方

12.45 <= 45.5

整型、浮点型、字符型

true

!=

比较左方是否不等于右方

'y' != 't'

基本数据类型、引用数据类型

true

/*
 * 关系运算符:
 * 		==,!=,>,>=,<,<=
 * 		关系运算符的结果是boolean类型。
 * 
 * 注意:
 * 		千万不要把==写成=
 */
public class OperatorDemo {
	public static void main(String[] args) {
		int a = 10;
		int b = 20;
		int c = 10;

		System.out.println(a == b);//结果false
		System.out.println(a == c);//结果true
		System.out.println("-----------------");
		System.out.println(a != b);//结果true
		System.out.println(a != c);//结果false
		System.out.println("-----------------");
		System.out.println(a > b);//结果false
		System.out.println(a > c);//结果false
		System.out.println("-----------------");
		System.out.println(a >= b);//结果false
		System.out.println(a >= c);//结果true
		System.out.println("-----------------");

		int x = 3;
		int y = 4;
		// System.out.println(x == y);
		// System.out.println(x = y);// 把y赋值给x,把x的值输出
		boolean bb = (x == y);
		// 报错
		// boolean cc = (x = y);
		int cc = (x = y);
	}
}

1.7、逻辑运算符

A:逻辑运算符有哪些:&、|、^、!以及&&、||

B:注意事项:

                     a:逻辑运算符的操作元必须是boolean型的数据

                     b:表达式:就是用运算符把常量或者变量连接起来的符合Java语法的式子。

                                        算数表达式:a + b

                                        比较表达式:a == b(条件表达式)

C:结论:

       &逻辑与:有false则false

       |逻辑或:有true则true

       ^逻辑异或:相同为false,不同为true

       !逻辑非:非false则true,非true则false

       特点:偶数个不改变本身

/*
 * 逻辑运算符:用于连接关系表达式。
 * &,|,^,!
 * &&,||
 * 
 * 与:&	有false则false
 * 或:|	有true则true
 * 异或:^ 相同则false,不同则true。(男女朋友)
 * 非:!	true则false,false则true
 */
public class OperatorDemo {
	public static void main(String[] args) {
		int a = 10;
		int b = 20;
		int c = 30;

		System.out.println((a > b) & (a > c));// false & false
		System.out.println((a < b) & (a > c)); // true & false
		System.out.println((a > b) & (a < c)); // false & true
		System.out.println((a < b) & (a < c)); // true & true
		System.out.println("---------------");
		System.out.println((a > b) | (a > c));// false | false
		System.out.println((a < b) | (a > c)); // true | false
		System.out.println((a > b) | (a < c)); // false | true
		System.out.println((a < b) | (a < c)); // true | true
		System.out.println("---------------");
		System.out.println((a > b) ^ (a > c));// false ^ false
		System.out.println((a < b) ^ (a > c)); // true ^ false
		System.out.println((a > b) ^ (a < c)); // false ^ true
		System.out.println((a < b) ^ (a < c)); // true ^ true
		System.out.println("---------------");
		System.out.println((a > b)); // false
		System.out.println(!(a > b)); // !false
		System.out.println(!!(a > b)); // !!false
	}
}

~逻辑运算符&&与&的区别

A:&&和&的区别?

      a:最终结果一样。

      b:&&具有短路效果。左边是false,右边不执行。&是无论左边是false还是true,右边都会执行

B:||和|的区别?

       a:最终结果一样

       b:||具有短路效果.左边是true,右边不执行,|是无论左边是false还是true,右边都会执行。

/*
 * &&和&的结果一样
 * ||和|的结果一样
 * 
 * &&和&的区别:
 * 		&&如果左边是false,右边不执行。
 * 		&无论左边是true还是false,右边都会执行。
 */
public class OperatorDemo2 {
	public static void main(String[] args) {
		int a = 10;
		int b = 20;
		int c = 30;

		System.out.println((a > b) && (a > c));// false && false
		System.out.println((a < b) && (a > c)); // true && false
		System.out.println((a > b) && (a < c)); // false && true
		System.out.println((a < b) && (a < c)); // true && true
		System.out.println("---------------");
		System.out.println((a > b) || (a > c));// false || false
		System.out.println((a < b) || (a > c)); // true || false
		System.out.println((a > b) || (a < c)); // false || true
		System.out.println((a < b) || (a < c)); // true || true
		System.out.println("---------------");

		int x = 3;
		int y = 4;
		// System.out.println((x++ > 4) & (y++ > 5)); // false & false
		System.out.println((x++ > 4) && (y++ > 5)); // false && false
		System.out.println("x:" + x);
		System.out.println("y:" + y);
	}
}

1.8、位运算符

关于位运算符,我这里只阐述技巧,因为开发中不常用,只用于应对面试。

~~位运算符适用于的数据类型有:byte、short、char、int和long

~~位运算符可以实现整数除以或乘以2的n次方的效果。例如y<<2与y*4的结果相同,y>>1的结果与y/2的结果相同。也就是说,一个数左移n位,就是数左移n位,就是将这个数乘以2的n次方,一个数右移n位,就是将这个数除以2的n次方。

1.9、三元运算符

A:格式:

       (关系表达式)?表达式1:表达式2;

       如果条件为true,运算后的结果是表达式1;

       如果条件为false,运算后的结果是表达式2;

B:实例:

       获取两个数中大数。

       int x=3,y=4,z;

       z = (x>y)?x:y;//z变量存储的就是两个数的大数

~~~案例

/*
 * 三元运算符:
 * 
 * 格式:
 * 		(关系表达式)?表达式1:表达式2;
 * 执行流程:
 * 		A:计算关系表达式的值,看是true还是false
 * 		B:如果是true,表达式1就是运算结果
 * 		      如果是false,表达式2就是运算结果
 */
public class OperatorDemo {
	public static void main(String[] args) {
		int a = 10;
		int b = 20;

		int c = (a > b) ? a : b;
		System.out.println("c:" + c);
	}
}
/*	
 * 三元运算符的练习
 * 比较两个整数是否相同
 */
public class OperatorTest {
	public static void main(String[] args) {
		// 定义两个int类型的变量
		int a = 10;
		int b = 20;

		boolean flag = (a == b) ? true : false;
		// boolean flag = (a == b);
		System.out.println(flag);
	}
}
/*
 * 获取三个整数中的最大值
 */
public class OperatorTest2 {
	public static void main(String[] args) {
		// 定义三个int类型的变量
		int a = 10;
		int b = 30;
		int c = 20;

		// 先比较两个整数的大值
		int temp = ((a > b) ? a : b);
		int max = ((temp > c) ? temp : c);
		System.out.println("max:" + max);
	}
}