java操作符

java操作符

在最底层,java的数据是通过操作符来操作的。

java中的操作符主要分为以下几种:

赋值操作符

java中通过”=”来进行赋值,它的意思是取右边的值,把它复制给左边。
在java中基本类型存储的是实际值,所以在赋值时,直接将一个地方的内容,复制到另一个地方,比如:a=b,那么b的内容复制给a,b不受现有a内容的影响。

但是当对对象赋值时,真正操作的其实是它的引用。当a=b时,其实是将对象的引用从b复制到了a,但是实际内存指向仍然是原有的对象。

用以下代码加以说明:

public class OperationTest1 {

    public static void main(String[] args) {
        int a1 = 10;
        int a2 = a1;
        a1 = 8;
        System.out.println("a1:" + a1);//a1:8
        System.out.println("a2:" + a2);//a2:10

        ObjectTest i1 = new ObjectTest(10);
        //将i1赋值给i2
        ObjectTest i2 = i1;
        //修改i2的值
        i2.setIndex(20);
        //打印i1的值
        System.out.println(i1.getIndex());//打印出 20
    }

    public static class ObjectTest {
        private int index;

        public ObjectTest(int index) {
            this.index = index;
        }

        public int getIndex() {
            return index;
        }

        public void setIndex(int index) {
            this.index = index;
        }
    }
}

算数操作符

算数操作符包括:加号(+),减号(-),除号(/),乘号(*)以及取模操作符(%)

其中加号(+)和减号(-)可以作为一元操作符存在
具体用如下代码说明:

public class OperationTest2 {

    public static void main(String[] args) {
        int a1 = 10;
        int a2 = 5;
        // [+]
        int a3 = a1 + a2;
        a3 += a1;
        System.out.println(a3);//25
        // [-]
        int a4 = a3 - a2;
        a4 -= a1;
        System.out.println(a4);//10
        // [*]
        int a5 = a1 * a2;
        a5 *= a1;
        System.out.println(a5);//500
        // [/]
        int a6 = a5 / a1;
        a6 /= a1;
        System.out.println(a6);//5
        // [%]
        int a7 = a1 % 3;
        a7 %= 3;
        System.out.println(a7);//1

        //一元[+] [-]
        int a8 = +a1;
        int a9 = -a2;
    }
}

在此基础上,java还提供了递增和递减的快捷运算功能
递减操作符:”–”
递增操作符:”++”
根据所处的位置又分为:前缀式和后缀式
用以下代码说明:

public class OperationTest3 {

    public static void main(String[] args) {
        int i=0;
        System.out.println("i++ :"+ i++);//i++ :0   先生成值,再执行运算
        System.out.println("++i :"+ ++i);//++i :2   先运算,再生成值
        System.out.println("i-- :"+ i--);//i-- :2
        System.out.println("--i :"+ --i);//--i :0

    }


}

关系操作符

关系操作符返回的是一个boolean结果,主要用于计算操作值之间的关系。
如果关系成立,返回true,不成立,则返回false。
关系操作符包括:小于(<),大于(>),等于(==),大于等于(>=),小于等于(<=)以及不等于(!=)。
具体功能用如下代码说明:

public class OperationTest4 {

    public static void main(String[] args) {
        String a = new String("1");
        String b = new String("1");
        System.out.println(a == b);//false  a与b虽然内容相同,但是不是同一个对象
        System.out.println(a != b);//true

        int a1 = 1;
        int b1 = 2;
        System.out.println(a1 > b1);//false
        System.out.println(a1 < b1);//true

        a1 = 2;
        System.out.println(a1 == b1);//true
        System.out.println(a1 != b1);//false

        a1 = 1;
        System.out.println(a1 >= b1);//false
        System.out.println(a1 <= b1);//true


    }
}

逻辑操作符

逻辑操作符分为:与(&),或(|),非(!),根据参数逻辑关系生成boolean值
当使用逻辑操作符时会遇到“短路“现象,当明确整个表达式时,余下部分不再计算。
用以下代码说明:

public class OperationTest5 {

    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        System.out.println("a>0 and b>0:" + (a > 0 && b > 0));//a>0 and b>0:true
        System.out.println("a>0 or b>0:" + (a > 0 || b > 0));//a>0 or b>0:true


        System.out.println("a>0 and b>0:" + (greatThan(a, 10) && greatThan(b, 10)));//compare:1 and 10  a>0 and b>0:false  这里只执行了第一个greatThan方法,因为第一次判定不符合,则整个表达式必定返回false,后续判定无需执行

        System.out.println("a>0 and b>0:" + (greatThan(a, 10) & greatThan(b, 10)));//compare:1 and 10 compare:1 and 10  a>0 and b>0:false  未执行短路

        System.out.println("a>0 or b>0:" + (greatThan(a, 0) || greatThan(b, 0)));//compare:1 and 0   a>0 or b>0:true
    }

    private static boolean greatThan(int leftPart, int rightPart) {
        System.out.println("compare:" + leftPart + " and " + rightPart);
        return leftPart > rightPart;
    }
}

按位操作符

按位操作符分为以下几种:与(&),或(|),异或(^),非(~),可与”=”等号连用。
代码如下:

public class OperationTest6 {

    public static void main(String[] args) {
        int a = 1;// 0001
        int b = 2;// 0010
        int c = 3;// 0011
        int temp = a & b;
        System.out.println("a&b:" + temp + " binary:" + Integer.toBinaryString(temp));//a&b:0 binary:0
        temp = a | b;
        System.out.println("a|b:" + temp + " binary:" + Integer.toBinaryString(temp));//a|b:3 binary:11
        temp = c ^ b;
        System.out.println("a^b:" + temp + " binary:" + Integer.toBinaryString(temp));//a^b:1 binary:1
        temp = ~b;
        System.out.println("~b:" + temp + " binary:" + Integer.toBinaryString(temp));//~b:-3 binary:11111111111111111111111111111101

    }
}

移位运算符

java中有三种移位运算符

<<      :     左移运算符,num << 1,相当于num乘以2
>>      :     右移运算符,num >> 1,相当于num除以2
>>>     :     无符号右移,忽略符号位,空位都以0补齐

使用如下代码说明:

public class OperationTest7 {

    public static void main(String[] args) {
        int a = 1;
        int b = -1;
        long l = -1;
        short s = -1;
        byte b2 = -1;
        System.out.println("a:" + a + " binary:" + Integer.toBinaryString(a));//a:1 binary:1
        int temp = a << 10;
        System.out.println("a<<10:" + temp + " binary:" + Integer.toBinaryString(temp));//a<<10:1024 binary:10000000000

        System.out.println("b:" + b + " binary:" + Integer.toBinaryString(b));//b:-1 binary:11111111111111111111111111111111

        temp = b >> 10;
        System.out.println("b>>10:" + temp + " binary:" + Integer.toBinaryString(temp));//b>>10:-1 binary:11111111111111111111111111111111 负数,移位的同时用1补齐

        temp = b >>> 10;
        System.out.println("b>>>10:" + temp + " binary:" + Integer.toBinaryString(temp));//b>>>10:4194303 binary:1111111111111111111111   向右移位10次,并用0补气

        l >>>= 10;
        System.out.println("l>>>10:" + l + " binary:" + Long.toBinaryString(l));//l>>>10:18014398509481983 binary:111111111111111111111111111111111111111111111111111111

        s >>>= 10;
        System.out.println("s>>>10:" + s + " binary:" + Integer.toBinaryString(s));//s>>>10:-1 binary:11111111111111111111111111111111  移位操作实际上是把值转换成int后再操作,然后截断返回给原有的值,就有可能产生这种情况

        b2 >>>= 10;
        System.out.println("b2>>>10:" + b2 + " binary:" + Integer.toBinaryString(b2));//b2>>>10:-1 binary:11111111111111111111111111111111


    }
}

三元操作符

三元操作符if-else
采用如下语法:
boolean-exp?value1:value2;
当表达式返回true时取value1,否则返回value2。
代码如下:

public class OperationTest8 {

    public static void main(String[] args) {
        System.out.println("if-else:" + (true ? "true" : "false"));//if-else:true
        //等同于
        String temp = null;
        if(true){
            temp = "true";
        }else
            temp = "false";
        System.out.println("if-else:" + temp);

    }
}

字符串操作符

java中可以通过操作符对字符串进行拼接操作,主要方式如下:

public class OperationTest9 {

    public static void main(String[] args) {
        String a = "a ";
        String b = "b";
        System.out.println(a+b);//a b
        a+=b;
        System.out.println(a);//a b

    }
}

类型转换操作符

类型转换是指当适当的时候java会将一种数据类型自动转换成另一种。
java允许把所有基本数据类型转化成其他基本数据类型,但是boolean除外。
在float和double转为整形时,进行截尾操作。
想要舍入,则必须调用Math中的round()方法。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值