Java运算符大全

一 运算符的优先级

运算符的优先级,实际上是在一个计算式中,存在多个运算符计算,先算谁,后算谁的问题。

在数学中,上小学时,常常听到老师说:"先乘除,后加减",这是基本原则,但在复杂的运算中,我们还得注意括号等等。

以下列出java运算符优先级别。

Java运算符大全_第1张图片

Java运算符大全_第2张图片

二 赋值处理

赋值是用等号运算符(=)进行的。它的意思是“取得右边的值,把它复制到左边”。

右边的值可以是任何常数、变量或者表达式,只要能产生一个值就行。但左边的值必须是一个明确的、

已命名的变量。也就是说,它必须有一个物理性的空间来保存右边的值。

举个例子来说,可将一个常数赋给一个变量(A=4;),但不可将任何东西赋给一个常数(比如不能)

三 算术运算符

Java的基本算术运算符与其他大多数程序设计语言是相同的。整数除法会直接砍掉小数,而不是进位。

Java也用一种简写形式进行运算,并同时进行赋值操作。这是由等号前的一个运算符标记的,

而且对于语言中的所有运算符都是固定的。例如,为了将4加到变量x,并将结果赋给x,可用:x+=4。

四 自动递增、递减

递减运算符是“--”,意为“减少一个单位”;递增运算符是“++”,意为“增加一个单位”。举个例子来说,

假设A是一个int(整数)值,则表达式++A就等价于(A= A + 1)。递增和递减运算符结果生成的是变量的值。

对每种类型的运算符,都有两个版本可供选用;通常将其称为“前缀版”和“后缀版”。“前递增”表示++运算符位于变量

或表达式的前面;而“后递增”表示++运算符位于变量或表达式的后面。

类似地,“前递减”意味着--运算符位于变量或表达式的前面;而“后递减”意味着--运算符位于变量或表达式的后面。

对于前递增和前递减(如++A或--A),会先执行运算,再生成值。而对于后递增和后递减(如A++或A--)会先生成值,

再执行运算。

eg:

package com.lanhuigu.java.compute;

/**
 * 递增(++)和递减(--)
 */
public class AutoTest {
    public static void main(String[] args) {
        // 1.递增
        // 1.1 先++(双加号在前)
        int preAdd = 1;
        //执行逻辑:preAdd先加1变成2,得到的结果preAdd为2赋值给表达式++preAdd,即preAddNum为2
        int preAddNum = ++preAdd;
        System.out.println("preAdd:" + preAdd);
        System.out.println("preAddNum:" + preAddNum);

        // 1.2 后++(双加号在后)
        int aftAdd = 1;
        //执行逻辑:先把aftAdd的值1赋值给表达式aftAdd++,即aftAddNum为1,再把aftAdd加1变成2
        int aftAddNum = aftAdd++;
        System.out.println("aftAdd:" + preAdd);
        System.out.println("aftAddNum:" + aftAddNum);

        //2.递减
        //2.1 先--(双减号在前)
        int preSubtract = 1;
        //执行逻辑:preSubtract先减1变成0,得到的结果preSubtract为0赋值给表达式--preSubtract,即preSubtractNum为0
        int preSubtractNum = --preSubtract;
        System.out.println("preSubtract:" + preSubtract);
        System.out.println("preSubtractNum:" + preSubtractNum);

        //2.2 后--(双减号在后)
        int aftSubtract = 1;
        //执行逻辑:先把aftSubtract的值1赋值给表达式aftSubtract--,即aftSubtractNum为1,再把aftSubtract减1变成0
        int aftSubtractNum = aftSubtract--;
        System.out.println("aftSubtract:" + preSubtract);
        System.out.println("aftSubtractNum:" + aftSubtractNum);
    }
}

控制台输出结果:

preAdd:2
preAddNum:2
aftAdd:2
aftAddNum:1
preSubtract:0
preSubtractNum:0
aftSubtract:0
aftSubtractNum:1

五 关系运算符

关系运算符生成的是一个“布尔”(Boolean)结果。它们评价的是运算对象值之间的关系。若关系是真实的,

关系表达式会生成true(真);若关系不真实,则生成false(假)。关系运算符包括小于(<)、大于(>)、

小于或等于(<=)、大于或等于(>=)、等于(==)以及不等于(!=)。等于和不等于适用于所有内建的数据类型,

但其他比较不适用于boolean类型。

注意==和equals()的区别:

package com.lanhuigu.java.compute;

/**
 * ==和equals()的区别:
 * (1)==相同对象的相同内容时为true,否则为false
 * (2)相同或不同对象的相同内容为true,否则为false
 */
public class EqualsTest {
    public static void main(String[] args) {
        // 创建两个不同对象t1、t2,但是内容相同均为1
        Integer t1 = new Integer(1);
        Integer t2 = new Integer(1);

        // Test
        System.out.println(t1 == t2);// false
        System.out.println(t1.equals(t2));// true
    }
}

六 逻辑运算符

逻辑运算符AND(&&)、OR(||)以及NOT(!)能生成一个布尔值(true或false)——以自变量的逻辑关系为基础。

&&: 全真才真,一假必假

||: 一真即真,全假才假

!: 真假相对

七 按位运算符

移位运算符面向的运算对象也是二进制的“位”。可单独用它们处理整数类型(主类型的一种)。

左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。

“有符号”右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。

“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;

若值为负,则在高位插入。Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。

这一运算符是C或C++没有的。若对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。

只有右侧的5个低位才会用到。这样可防止我们在一个int数里移动不切实际的位数。若对一个long值进行处理,

最后得到的结果也是long。此时只会用到右侧的6个低位,防止移动超过long值里现成的位数。但在进行“无符号”右移位时,

也可能遇到一个问题。若对byte或short值进行右移位运算,得到的可能不是正确的结果(ava 1.0和ava 1.1特别突出)。

它们会自动转换成int类型,并进行右移位。但“零扩展”不会发生,所以在那些情况下会得到-1的结果。

八 三元(三目)运算符

布尔表达式?值0:值1;

如果布尔表达式为true,整个表达式的值为值0,否则,整个表达式的值为值1;

package com.lanhuigu.java.compute;

/**
 * 布尔表达式?值0:值1;
 */
public class ThreePhase {
    public static void main(String[] args) {
        String testStr = 2 > 1 ? "值0" : "值1";
        System.out.println(testStr);
    }
}

九 字符串运算+号

连接不同的字符串,实际工作中用StringBuffer或StringBuilder替代"+"号连接字符串。

package com.lanhuigu.java.compute;

/**
 * +连接不同的字符串
 */
public class MyPlusSign {
    public static void main(String[] args) {
        //1、从左边开始算起,1+1为2,当遇到字符串时,自动转换成字符串连接
        System.out.println(1 + 1 + "this is my test" + 1 + 1 + "!");

        //2、从左边开始,右边遇到左边的字符串自动转换成字符串连接
        System.out.println("this is my test" + 1 + 1 + 1 + "!");
    }
}

控制台输出:

2this is my test11!
this is my test111!

你可能感兴趣的:(#,---Java基础)