美文网首页
Think in java 学习笔记:操作符

Think in java 学习笔记:操作符

作者: sinczy | 来源:发表于2016-09-07 23:09 被阅读0次

1. 赋值

  • 对于基本数据类型赋值是很简单的。基本数据类型存储了实际的值,而不是指向对象的引用。例如,对基本数据类型使用a=b,那么b的内容就复制给a了,若接着修改a,b不会受到影响。
  • 为对象赋值时则不同。对对象进行操作时,我们真正操作的是对象的引用。所以如果“将一个对象赋值给另一个对象”,实际上是将“引用”复制到另一个地方。这意味着假若对对象使用c=d,那么c和d都指向d原来指向的那个对象。下面的例子阐述了这一点。
    import static net.mindview.util.Print.*; class Tank{ int level; } public class Assignment{ public static void main(String[] args){ Tank t1 = new Tank(); Tank t2 = new Tank(); t1.level = 4; t2.levle = 3; print(t1.level+" "+t2.level); t1 = t2; print(t1.level + " " + t2.level); t1.level = 5; print(t1.level + " " + t2.level); } }
    当对t1赋值时,这个引用被覆盖,也就是丢失了,而对那个不再被引用的对象,即4 会由“垃圾回收器”自动清理。
    这种现象叫做“别名现象”,要想避免这种现象,应该写成t1.level=t2.level
    ,这样就可以保持两个对象彼此独立。
  • 方法调用中的别名现象
    class Letter{ char c; } public class PassObject { static void f(Letter y){ y.c = 'a'; } public static void main(String[] args){ Letter x = new Letter(); x.c = 'b'; print(x.c); f(x); print(x.c); } }
    方法f()仿佛要在它的作用域内复制其参数Letter y的一个副本,但实际上只是传递了一个引用,y.c = 'a' 实际改变的是f()之外的对象。

2. 逻辑操作符

  • 短路

public class ShortCircuit {

static boolean test1(int val){
    System.out.println("test1"+val);
    System.out.println("result"+(val<1));
    return val<1;
}

static boolean test2(int val){
    System.out.println("test2"+val);
    System.out.println("result"+(val<2));
    return val<2;
}

static boolean test3(int val){
    System.out.println("test3"+val);
    System.out.println("result"+(val<3));
    return val<3;
}

public static void main(String[] args) {
    boolean b = test1(0)&&test2(2)&&test3(2);
    System.out.println(b);
}

}

三个测试结果中,第一个是true,第二个是false,由于这意味着整个表达式都是false,所以没必要继续计算剩余的表达式,那样只是浪费,这就是短路。

3. 类型转换

  • 注意当类型转换成一个较小的类型时,必须注意“窄化转换”的结果,否则会在类型转换时不知不觉丢失了信息。在计算过程中还有可能会出现溢出。

相关文章

网友评论

      本文标题:Think in java 学习笔记:操作符

      本文链接:https://www.haomeiwen.com/subject/zcmdettx.html