美文网首页
Java编程原理-3.操作符

Java编程原理-3.操作符

作者: Yuri7 | 来源:发表于2019-05-31 20:26 被阅读0次

    操作符

    关系操作符

    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;
            System.out.println ("1: t1.level:" + t1.level + ", t2.level:" + t2.level);
            t1 = t2;
            System.out.println ("1: t1.level:" + t1.level + ", t2.level:" + t2.level);
            t1.level = 27;
            System.out.println ("1: t1.level:" + t1.level + ", t2.level:" + t2.level);
    
        }
    //out:  t1.level: 9, t2.level: 47
    //      t1.level: 47, t2.level: 47
    //      t1.level: 27, t2.level: 27
    

    赋值操作是对象的应用,所以改变t1时也改变了t2

    class Letter{
        char c;
    }
    public class Assignment {
        static void f(Letter y){
            y.c = 'z';
        }
        public static void main(String[] args){
            Letter x = new Letter();
            x.c = 'a';
            System.out.println("1: x.c: " + x.c);
            f(x);
            System.out.println("2: x.c: " + x.c);
    
        }
    }
    
    //out:  1: x.c: a
    //      2: x.c: z
    
    public class Assignment {
        public static void main(String[] args){
            Integer n1 = new Integer(47);
            Integer n2 = new Integer(47);
            System.out.println(n1 == n2);
            System.out.println( n1 != n2);
            System.out.println(n1.equals(n2));
        }
    }
    // out: false true true
    

    因为两个Integer对象都是相同的,尽管对象内容相同但对象引用却不同,而==!=比较的是对象的引用. equals()的默认行为是比较引用。

    class Value{
        int i;
    }
    public class Assignment {
        public static void main(String[] args){
            Value v1 = new Value();
            Value v2 = new Value();
            v1.i = v2.i = 100;
            System.out.println(v1.equals(v2));
        }
    }
    // out: false
    

    按位操作符和移位操作符

    按位操作符和移位操作符全部按二进位位进行计算
    <center>
    <font size=2>

    符号 名称 用法 运算规则
    & 按位与运算符 同为1时值为1,负数按补码形式参与 0&0=0; 0&1=0; 1&0=0; 1&1=1
    | 按位或运算符 只要有一个为1,其值为1,负数按补码形式参与 0|0=0; 0|1=1; 1|0=1; 1|1=1
    ^ 异或运算符 相应位为异时值为1 0^0=0; 0^1=1; 1^0=1; 1^1=0
    ~ 取反运算符 按位取反 ~1=0; ~0=1
    >> 右移运算符 全部右移若干位,正数左补0,负数左补1,右边丢弃 每右移一位,相当于该数除以2
    << 左移运算符 全部左移若干位,右边补0,左边丢弃 每左移一位,相当于该数乘以2
    >>> 无符号右移运算符 全部右移若干位,左边补0,右边丢弃 -

    </center>
    </font>
    复合赋值运算符
    位运算符和赋值运算符可以结合有如下运算符:
    <center>&=; |=; >>=; <<=; ^=</center>
    a &= b相当于a=a & b, 其他复合赋值运算符类似

    不同长度的数据进行位运算
    如果两个不同长度的数据进行位运算时,系统会将二者按右端对齐,然后进行位运算(long型数据与int型数据进行与运算)。右端对齐后,左边不足的位依下面三种情况补足:

    1. 如果整型数据为正数,左边补16个0。
    1. 如果整型数据为负数,左边补16个1。
    1. 如果整形数据为无符号数,左边也补16个0

    三元操作符if-else

    三元操作符也成为条件操作符,有三个操作数,和普通的if-else不同的是表达式如下:
    <center> boolean-exp ? value) : value1</center>
    如果boolean-exp(布尔表达式)的结果为true,就计算value0, 如果为false,就计算value1.
    单元操作符景观高效率简介,但他很容易产生可读性很差的代码。他和if-else完全不同,因为它会产生一个值

    类型转换操作符

    Java中可以从任意基本数据类型转型到外的基本数据类型,boolean类型不可以转换为其他的数据类型.
    整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则:

    1. 容量小的类型默认转换为容量大的数据类型;数据类型按容量大小排序为:
        byte,short,char,->int->long->float->double;
        byte,short,char之间不会相互转换他们三者在计算时首先会转换为int类型;
    2. 容量大的数据类型转换为容量小的数据类型时,要叫上强制转换符,
      但是可能造成精度降低或溢出(double转换成float时会溢出),使用时要格外注意;
    3. 有多种类型的数据混合运算时,系统会首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算;
    4. 实数常量,浮点型默认为double类型.整数常量默认为int类型;

    截尾和舍入
    float和double 转为整形时,总是对该数字进行截尾,如果想得到摄入的结果,需要用到java.land.Math中的roung()

    public class Assignment {
        public static void main(String[] args){
            double above = 0.7, below = 0.4;
            float fabove = 0.7f, fbelow = 0.4f;
            System.out.println("(int)above: "+ (int)above);
            System.out.println("(int)below: "+ (int)below);
            System.out.println("(int)fabove: "+ (int)fabove);
            System.out.println("(int)fabove: "+ (int)fabove);
            System.out.println("Math.round(above): "+ Math.round(above));
            System.out.println("Math.round(below): "+ Math.round(below));
            System.out.println("Math.round(fabove): "+ Math.round(fabove));
            System.out.println("Math.round(fbelow): "+ Math.round(fbelow));
        }
    }
    //out:  (int)above: 0; (int)below: 0; (int)fabove: 0; (int)fabove: 0
    //      Math.round(above): 1;  Math.round(below): 0;  
    //      Math.round(fabove): 1; Math.round(fbelow): 0
    

    相关文章

      网友评论

          本文标题:Java编程原理-3.操作符

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