Java中使用逻辑运算符的短路现象以及关于static关键字的疑惑

短路现象:

/**
 * 短路测试
 * 在使用逻辑运算符的时候,我们会遇到特殊现象(短路现象)
 * @author 淡写
 *
 */
public class ShortCircuitTest {

	public static void main(String[] args) {
		//这里前面两步都是true,还不能确定整个表达式的结果,所以它会继续执行完第3个方法,然后得到false
		boolean a= test(1)&&test(2)&&test(3);
		System.out.println("最终结果:"+a);
		//这里第一步是true,然后继续执行第二个方法,返回的结果为false,到这里的时候,我们可以确定整个表达式的结果,当系统可以确定结果的时候,系统就不会执行test(1)
		boolean b= test(2)&&test(3)&&test(1);
		System.out.println("最终结果:"+b);
		//这里第一步就能知道表达式的结果 ,就不会执行test(2) test(1)方法。
		boolean c= test(3)&&test(2)&&test(1);
		System.out.println("最终结果:"+c);
		//上面三个表达式看上去都是一样的,由于执行的顺序不一样,会使系统或早或慢得到结果
		
		//同样的道理
		boolean d= test(4)||test(3)||test(2);
		System.out.println("最终结果:"+d);
		boolean e= test(3)||test(2)||test(1);
		System.out.println("最终结果:"+e);
		boolean f= test(2)||test(3)||test(4);
		System.out.println("最终结果:"+f);
		
		//我们在实际使用逻辑操作符的时候,可以用短路这样的现象,来减少程序的判断次数,获得潜在的性能提升
		//使用&&运算的时候将容易出现false的放在前面,使用||运算的时候将容易出现true的放在前面
		//
	}

	private static boolean test(int i) {
		System.out.println("test(" + i + ")");
		System.out.println("result:" + (i < 3));
		return i < 3;
	}

}

static关键字的疑惑:

/**
 * 默认equals测试
 * https://www.cnblogs.com/dolphin0520/p/3799052.html static解析
 * https://www.cnblogs.com/wangjzh/p/5258254.html JVM内存区域与内存分配
 * https://bbs.csdn.net/topics/392456094?page=1 静态内部类
 * 静态内部类,和普通类有什么区别?静态内部类和静态方法的内存分配?在调用静态内部类或静态方法的时候,是使用的一个类或方法吗?
 * @author 淡写
 *
 */
public class EqualsMethod {
	int a;
	static int b;
	public static void main(String[] args) {
		Value v1 = new Value();
		Value v2 = new Value();
		v1.i = 42;
		System.out.println(v1.i+","+v2.i);
		v2.i = 58;
		System.out.println(v1.i+","+v2.i);
		v1.i=v2.i;
		System.out.println(v1.i+","+v2.i);
		System.out.println(v1.equals(v2));
		//默认equals比较的是对象的引用
	}
	static class Value {
		int i;
	}
}

我参考了几篇博文,对static还是有疑惑,有谁能解答我疑惑的,欢迎给我留言。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值