【Java入门】--javaSE基础语法(三)--运算符

目录

  • 一、前言
  • 二、算数运算符
    • 2.1、加(+)、减(-)、乘(*)
    • 2.2、除(/)
    • 2.3、取模(%)
    • 2.4、增量运算符
    • 2.5、自增自减运算符
  • 三、关系运算符
    • 3.1、小于(<)、大于(>)、等于(==)
  • 四、逻辑运算符
      • 4.1、逻辑与&&(短路)
      • 4.2、逻辑或||(短路)
      • 4.3、逻辑非
      • 4.4、&&和&,||和|的区别
  • 五、位运算符
      • 5.1、按位与(&)、按位或(|)、取反(~)、按位异或(^)
      • 5.2、移位运算符(<< 、>> 、>>>)(了解)
  • 六、条件运算符
      • 6.1、表达式1?表达式2:表达式3
  • 七、运算符的优先级
  • 八、总结

一、前言

在前面我们学习了数据类型和变量。那么,我们怎么使用变量进行计算呢?要用变量进行计算,我们首先需要明白什么是运算符,有哪几种运算符?运算符对操作数进行操作时的符号,不同操作符操作含义不同。当运算符对变量进项操作时,变量也可成为操作数。在java中,运算符有算数运算符(+、-、*、/)、关系运算符(<、>、==)、逻辑运算符、位运算符以及条件运算符。

二、算数运算符

2.1、加(+)、减(-)、乘(*)

在java中的加减乘除也跟c差不多的,这里举例一个加法例子,然后减法和乘法类似。我主要是把需要注意的点单独详细讲。

public class test {
    public static void main(String[] args) {
        int a=10;
        int b=20;
        System.out.println(a+b);
    }
}

运行结果:

【Java入门】--javaSE基础语法(三)--运算符_第1张图片

2.2、除(/)

被除数不能为零,先来看看正常输出结果,然后看异常会是怎么样的。

public class test {
    public static void main(String[] args) {
        int a=10;
        int b=2;
        System.out.println(a/b);
    }
}

运行结果:

【Java入门】--javaSE基础语法(三)--运算符_第2张图片

被除数为0的情况,编译器会报错

【Java入门】--javaSE基础语法(三)--运算符_第3张图片

2.3、取模(%)

取模的另一种表达就是取余数。这里讲一个很有意思的例子,相信很多小伙伴多多少少都在这里栽过跟头。

public class test {
    public static void main(String[] args) {
        System.out.println(10%3);
        System.out.println((-10%3));
        System.out.println((10%-3));
        System.out.println((-10%-3));
    }
}

运行结果:

【Java入门】--javaSE基础语法(三)--运算符_第4张图片

你做对了么?做对了那就恭喜你。如果做错了那也没关系,先来思考一下,这是为什么呢?它是怎么计算的呢?这是因为:

【Java入门】--javaSE基础语法(三)--运算符_第5张图片

在C语言中%两边操作数不能是浮点型的,但是在java中,这是可以被允许的。在下面的代码中,编译器帮你进行了隐式类型转换(int–>double)。这里有个规律,就是当小的类型跟大的类型进行运算时,编译器会帮你进行隐式转换(小转大)。

public class test {
    public static void main(String[] args) {
        double a=12.3;
        int b=5;
        System.out.println(a%b);
    }
}

运行结果:

【Java入门】--javaSE基础语法(三)--运算符_第6张图片

2.4、增量运算符

+=、-=、*=、%=也叫增量运算符,用法跟C语言的差不多。int a=10;int b=10;a+=b;就是a=a+b;但是在java中a+=b和a=a+b还是有一点点区别的。

先来看看(a+=b):

public class test {
    public static void main(String[] args) {
        short a=10;
        a+=2;
        System.out.println(a);
    }
}

运行结果(a+=b):

【Java入门】--javaSE基础语法(三)--运算符_第7张图片

第二种(a=a+b)运行结果:

【Java入门】--javaSE基础语法(三)--运算符_第8张图片

这里他会直接给你报错的,原因是2是int类型,前面我们说过。所以这里的2+a被转换成了int类型,当你int类型赋值给short的时候,编译器就会报错。想不报错的话你可以进行强转,但是要承担数据丢失的风险,但是要注意强转也是要在目标是话剧类型范围之内,不然数据就会得到一个毫不相干的值。(这里不在赘述,上一节将数据类型的时候有讲过)但是为什么a+=b编译器就不报错呢,这两者不是一样的吗?原因就在于+=是编译器帮你进行了int-->shot转换。这就是在Java中a+=b和a=a+b的一点小区别。

2.5、自增自减运算符

++、--运算符,还分为前置++和后置++、前置–和后置–。至于是前置还是后置,在一条语句中结果都是一样的,真正的区别就是在表达式中。这里就举着两个例子让你体会一下。

在语句中:

public class test {
    public static void main(String[] args) {
       int a=10;
       int b=20;
       a++;
       ++b;
        System.out.println(a);
        System.out.println(b);
    }
}

运行结果:

【Java入门】--javaSE基础语法(三)--运算符_第9张图片

在表达式中:

public class test {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = a++;//这里是先把a的值个c在++啊(后置++)
        int d = ++b;//这里是先++b在赋值给d(后置++)
        System.out.println(c);
        System.out.println(d);
        System.out.println(a);
        System.out.println(b);
    }
}

运行结果:

【Java入门】--javaSE基础语法(三)--运算符_第10张图片

三、关系运算符

3.1、小于(<)、大于(>)、等于(==)

这里需要注意的就是关系运算符的结果只有true和false,不同于c语言的是,0是假,非零就是真。而且很多人容易犯错的就是在java中两个等号(==)才是等于,一个等号(=)表示的是赋值。

四、逻辑运算符

逻辑运算符无非就三个(&&,||,!)。 逻辑运算符的结果是boolean类型,就是只有true的false两种取值。这里将几个需要注意的点。

4.1、逻辑与&&(短路)

&&逻辑与跟c用法差不多,一假就假。这里提一下一个需要注意的点。就是当逻辑与前一个操作数为假时,后一个操作数就会被短路掉。也就是说,只要前一个操作数为假,编译器就不会检验后一个操作数,而是直接出结果为假。(只有前一个操作数为真时编译器才会检验后一个操作数的真假)下面来给你举一个例子。总所周知除号分母是不能够为0的,但是这里编译器却没有报错,原因是编译器自动忽略掉了这一段代码。如果你把分母为0表达式直接拎出来,并且表达式完整,编译器就会给你报分母不能为0的错误了。

public class test {
    public static void main(String[] args) {

        int a=10;
        int b=20;
        System.out.println(a>20&&(b/0)==1);

    }
}

运行结果:

如果把上图输出逻辑与的表达式1和表达式2交换,编译器就会给你报这样的错误:

【Java入门】--javaSE基础语法(三)--运算符_第11张图片

总结规律:

【Java入门】--javaSE基础语法(三)--运算符_第12张图片

4.2、逻辑或||(短路)

逻辑或也叫短路或,顾名思义就知道肯定和短路与有着相同的性质。这里也列出跟逻辑与一样的例子来验证一下。这里需要注意的是,逻辑或前面的操作数是有真为真。当逻辑非前面的操作数为真时,编译器也不会检验逻辑或后面的操作数的真假。

public class test {
    public static void main(String[] args) {

        int a=10;
        int b=20;
        System.out.println(a==10||(b/0)==1);

    }
}

运行结果:

【Java入门】--javaSE基础语法(三)--运算符_第13张图片

如果把上图输出逻辑或的表达式1和表达式2交换,编译器就会给你报同样的错误:

【Java入门】--javaSE基础语法(三)--运算符_第14张图片

总结规律:

【Java入门】--javaSE基础语法(三)--运算符_第15张图片

4.3、逻辑非

逻辑非就是一个!号,就表示逻辑非。规律是:非真即假,非假即真。

【Java入门】--javaSE基础语法(三)--运算符_第16张图片

4.4、&&和&,||和|的区别

要说&&和&,||和|的区别就在短路上,就是说&&和||支持短路,然后&和|不支持短路。(&叫按位与,|叫按位或,&和|会在下面介绍)

五、位运算符

位运算符主要有四个(&,|,^,~),除了~是一元运算符之外,其他都是二元运算符。

5.1、按位与(&)、按位或(|)、取反(~)、按位异或(^)

按位与(&):如果两个二进制位为1则结果为1 ,否则为0
按位或(|):如果两个二进制位为0,则结果为0,否则为1
异或(^):两个二进制位相同结果为0,否则结果为1
取反(~):二进制位为1就转0,为0就转1

这里讲解一个按位异或,其他运算方式也类似的

【Java入门】--javaSE基础语法(三)--运算符_第17张图片

5.2、移位运算符(<< 、>> 、>>>)(了解)

移位运算符有三个,都是二元运算符。移位运算是按照二进制比特位来计算的。在java中增加了>>>(无符号右移),表示最右侧不要了,最左侧补0。

左移(<<):最左侧位不要了,最右侧位补0
右移(>>):最右侧位不要了,最左侧位补符号位(正数0,负数1)
无符号右移(>>>):最右侧位不要了,最左侧位补0

六、条件运算符

在java中条件运算符只有一个,也与C语言中的用法类似。我们也可以用条件运算符把别的类型变成boolean类型输出,不过很少用。如果是int–>boolean用条件运算符可以写成a>10?true:false;

6.1、表达式1?表达式2:表达式3

当表达式成立时,会输出表达式2的结果;当表达式1不成立时,会输出表达式3的结果。

public class test {
    public static void main(String[] args) {
        int a=10;
        int b=20;
        boolean c=a>10?true:false;
        System.out.println(c);

    }
}

运行结果:

【Java入门】--javaSE基础语法(三)--运算符_第18张图片

总结规律:

【Java入门】--javaSE基础语法(三)--运算符_第19张图片

七、运算符的优先级

如果不使用圆括号,就会按照运算符的优先次序进行排序。下图给出运算符的优先级和结合性:

【Java入门】--javaSE基础语法(三)--运算符_第20张图片

运算符的优先级和结合性总结流程图(从上到下优先级依次降低):

【Java入门】--javaSE基础语法(三)--运算符_第21张图片

八、总结

只有枯燥的学习才能收获极致的熟练,只有机械的重复才有资格拥抱唯美的创造

【Java入门】--javaSE基础语法(三)--运算符_第22张图片

你可能感兴趣的:(Java自我修养,java,开发语言,jvm)