短路现象:
/**
* 短路测试
* 在使用逻辑运算符的时候,我们会遇到特殊现象(短路现象)
* @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还是有疑惑,有谁能解答我疑惑的,欢迎给我留言。