Java笔记——控制程序流程

来源:互联网 发布:网络四大名著紫川 编辑:程序博客网 时间:2024/05/18 13:26

使用Java运算符

运算符

  • 几乎所有运算符都只能对主类型进行操作
  • "=,==,!="能够操作所有对象

优先级

  • 程序员经常会忘记其他优先级,所有应该用括号明确规定计算规则

赋值

  • 符号:=
    • 取得右边的值,把它复制到左边
  • 对主类型的赋值
    • 只是简单的内容复制,修改其中之一并不会对另一个主类型造成影响
  • 为对象赋值
    • 真正操作的是它的句柄,所以两个对象互相赋值,实际上就是将一个句柄复制给另一个对象,最终指向同一个对象。
package com.wangchao.demo;class Number{    int i;}public class Assignment {    public static void main(String[] args) {        Number n1 = new Number();        Number n2 = new Number();        n1.i=9;        n2.i=47;        System.out.println(n1.i+" "+n2.i);        n1=n2;        System.out.println(n1.i+" "+n2.i);        n1.i=27;        System.out.println(n1.i+" "+n2.i);    }}
运行结果:9 4747 4727 27

在经过赋值运算之后,改变n1.i的值同时n2.i的值也发生了改变,这是由于他们两个包含了相同的句柄,指向n1对象内部容纳了值9的一个对象,n2的句柄已经由垃圾收集器自动清除 通过n1.i = n2.i的方式,便可实现内容的赋值,而避免这种情况发生。


  • 方法调用中的别名处理
    • 别名和它的对策是一个相当麻烦的问题,现在应当先引起重视,后续会详细提到。

算数运算符
关系运算符

  • ==与equals
Integer n1 = new Integer(41);Integer n2 = new Integer(41);System.out.println(n1 == n2);//FalseSystem.out.println(n1.equals(n2));//True

但其实equals的默认行为是比较句柄,除非在类中改变了equals()方法。但大多数Java类库已经实现了equals()的方法去比较内容而非句柄

逻辑运算符

  • AND
  • OR
  • NOT

不可将一个非布尔值当做布尔值在逻辑表达式中使用

按位运算符

  • &
    • 若两个输出位都是1,则在输出位生成一个1,否则为0
  • |
    • 若两个输出位都是0,则在输出位生成一个0,否则为1
  • ^
    • 不全是1,则在输出位生成一个1,否则为0

移位运算符

  • <<
    • 将运算符左边的运算对象向左移动运算符右侧指定位数
    • 有符号运算符
  • >>
    • 同上
    • 有符号运算符,高位为负补1,否则补0
  • >>>
    • 无符号右移运算符
package com.wangchao.demo;public class URshift {    public static void main(String[] args) {        // TODO Auto-generated method stub        int i = -1;        i >>>= 10;        System.out.println(i);        //4194303        long l = -1;        l >>>= 10;        System.out.println(l);        //18014398509481983        short s = -1;        s >>>= 10;        System.out.println(s);        //-1        byte b = -1;        System.out.println(b);        //-1    }}

三元运算符

Static int ternary(int i){    return i < 10 ? i * 100 : i * 10;}

?前为逻辑判断语句
其值为真,则执行i*100
反之,则执行i*10


造型运算符

void casts(){    int i = 200;    long l = (long) i;    long l2 = (long) 200;}

进行缩小赋值则有造成信息丢失的危险,则必须进行造型
boolean不允许进行造型转换
类不允许造型转换


Java没有sizeof()
label

label1外部循环1{内部循环2{//..break;//1//..continue;//2//..continue label1;//3break label1;//4}}
条件一:中断内循环,并在外部循环结束条件二:中断内循环当前循环,并在内部开始下一次循环条件三:同时中断内循环与外循环,并在外部开始下一次循环条件四:同时中断所有循环
0 0
原创粉丝点击