Java编程思想 操作符 控制执行流程

操作符
控制执行流程
1.赋值运算符引起的别名现象
Class Tank{
    int level;
}
public class Assignment{
    public static void main(String[] args){
        Tank t1 = new Tank();
        Tank t2 = new Tank();
        t1.level = 9;
        t2.level = 47;
        t1 = t2;//t1与t2是相同的引用,t1此时指向47
        t1.level = 27;//t1与t2都指向27
    }
}

为使t1和t2相互独立,不能直接t1=t2,而是要采用:

t1.level = t2.level;

将对象传递给方法也会出现相同的问题。

public class PassObject{
    static void f(Letter y){
        y.c = 'z';
    }
}

若调用f(x),无论之前x.c的值为多少,最后都会等于’z’。

2.Random类

如果创建过程中没有传递任何参数,那么Java会将当前时间作为随机数生成器的种子。

可以通过在创建Random对象时提供相同的种子,来产生相同的随机数序列。

3.关系操作符

==和!=号在测试对象的等价性时容易让人感到迷惑。

public class Equivalence{
    public static void main(String[] args){
        Integer n1 = new Integer(47);
        Integer n2 = new Integer(47);
        System.out.println(n1 == n2);//不为同一引用,返回结果为false
        System.out.println(n1 != n2);//返回true
    }
}

为比较两个对象的实际内容是否相同,需要引入特殊方法equals()

System.out.println(n1.equals(n2));//n1,n2均为Integer类创建的对象,返回为true!

但是事情并没有那么简单~如果创建了新类。这样直接比较数据成员的大小就行,没必要用equals。

Class Value{
    int i;
}//……
v1.i = v2.i = 100;
System.out.println(v1.equals(v2));//返回为false

比较基本数据类型的值,用==。比较两个引用是否指向同一个对象,用==。比较两个引用的值是否相等,用a.equals(b)。

4.逻辑运算符

注意逻辑运算符(逻辑表达式)与按位运算符(位)的区别。

非布尔值不可以在逻辑运算中使用。

短路现象:一旦逻辑表达式的值已经确定,后面的部分不再进行计算。

5.移位操作符

左移操作符(<<)可以按照操作符右侧指定的二位数将操作符左边的操作数向左移动,在低位补0。

”有符号“右移操作符(>>)按照操作符右侧指定的二位数将操作符左边的操作数向右移动,若符号为正,在高位插入0,若为负,插入1。

“无符号”右移操作符(>>>),无论正负,在最高位插入0.

移位可以与等号(<<=或>>=或>>>=)组合使用,在完成移位之后,会将得到的结果赋给左边的变量。

6.字符串操作+和+=
public class StringOperators{
    public static void main(String[] args){
        int x = 0, y = 1, z = 2;
        string s = "x, y, z ";     
        System.out.println(s + x + y + z);//输出为"x, y, z 012"
        s += "(summed) = "//连接字符串
        System.out.println(s + (x + y + z));//输出为"x, y, z (summed) = 3"
    }
}
7.类型转换

扩展转换 自动进行

窄化转换 显式进行 比如在对float进行初始化时,就必须在后面标注f。

在将float或者double转型为整型值,总会对数据进行截尾。如果要得到四舍五入的结果,就需要用到round()方法。

double above = 0.4;
Math.round(above);
8.break与continue

break:跳出当前循环

continue:结束当前循环之后的语句,跳回当前循环的开头并执行下一次循环

带标签的break:中断并跳出带标签的循环

标签语法:

label:
for(;true;i++) {
    if(i==3) {
        System.out.println(i);
        continue label;
    }
    if(i==6) {
        System.out.println(i);
        break label;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值