java基础 运算符号

Java运算符:算术运算符、关系运算符、逻辑运算符、位运算符

算术运算符

运算符:对常量和变量进行操作的符号。
java基础 运算符号_第1张图片
++i 和 i++ 的区别()

i++:先赋值,再自增
++i:先自增,再赋值

package testDemo3;

public class TestOne implements Runnable{
	public static void main(String[] args) {
		int i = 0,j = 0;
		System.out.println(++i);	//1
		System.out.println(j++i;	//0
	}
}

注意:++、- - 是线程不安全的,在多线程下可能会发生混乱

package testDemo3;

public class TestOne implements Runnable{
	public static void main(String[] args) {
		int num1 = 0;
		for(int j = 0;j<20;j++) {
			System.out.println("thread1: " +Thread.currentThread().getName() + ", num1:" + (++num1));
		}		
		
		new Thread() {
			int num2 = 0;
			@Override
			public void run() {
				for(int i = 0;i<20;i++) {
					System.out.println("thread2: " + this.getName() + ",num2: " + (++num2));
				}
			}
		}.start();
	}
	
	@Override
	public void run() {
		int num3 = 0;
		for(int i = 0;i<20;i++) {
			System.out.println("thread3: " + Thread.currentThread().getName() + ",num3: " + (++num3));
		}
	}	
}

其混乱原因:++/- -对于底层系统操作并不是一条CPU指令,而是三条——取值、累加(累减)、存储,因此无法保证原子性,可能会产生误差。

如何避免++/- -发生误差

方法一:可将其放入同步锁中;
方法二:可自己声明锁,将其放入其中;
方法三:可使用 AtomicInteger 代替 int。

关系运算符

java基础 运算符号_第2张图片

条件运算符(三元运算符)

语法:布尔表达式?表达式1:表达式2

运算过程:如果布尔表达式为 true,则返回表达式1的值,如果为 false,则返回表达式2的值。

逻辑运算符

逻辑运算符用于对布尔型的数据进行操作,其结果仍是一个布尔型。
java基础 运算符号_第3张图片

位运算符

java基础 运算符号_第4张图片

面试题集
public class test {
	public static void main(String[] args) {
		System.out.println(6 & 3);    //输出结果:2
		System.out.println(6 & 2);    //输出结果:2
		
		System.out.println(6 | 3);    //输出结果:7
		System.out.println(6 | 2);    //输出结果:6
		
		System.out.println(6 ^ 3);    //输出结果:5
		System.out.println(6 ^ 2);    //输出结果:4
		
		System.out.println(~6);       //输出结果:-7
	}
}

逻辑双与&&和逻辑单与&的区别?

区别:
逻辑双与&&,如果左边的表达式位false,则符号右边的表达式不会执行,称为扩展的逻辑运算符的短路效果;
而单逻辑与&,如果左边的表达式位false,同样会对右边的表达式进行执行。

感谢您的阅读。关注公众号(微微的灯光),让我们一起学习,一起交流,一起进步。
java基础 运算符号_第5张图片

你可能感兴趣的:(Java基础,#,运算符号,java)