Java 操作符

Posted 莫西里

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 操作符相关的知识,希望对你有一定的参考价值。

一、介绍

Java中的操作符是用来操作Java对象的符号,常见的有加减乘除等操作,Java的操作符从C/C++的操作符继承而来,因此在很大程度上与C++的操作符相似。

二、详解

Java操作符分为算数操作符、赋值操作符、逻辑操作符、递增/递减操作符、位操作符等多种。

1、优先级

Java操作符存在一定的优先级别,最常见的就是先乘除后加减,其他操作符的优先级一般很难记住,我们可以在Java中通过括号来提高一个表达式的优先级,括号内的优先级是最高的。

2、赋值操作符

代表:=(赋值号)
要求:赋值操作符必须是一个变量
作用:赋值操作符会将右侧的值赋值给左侧变量,左侧变量拥有右侧的值。并且该操作符可以操作Java中的所有对象。
当用户在操作基本数据类型时,赋值号会对值进行赋值,从而两个变量的值进行独立,相互操作不受影响;当用赋值号操作对象引用时,则是将一个对象的引用赋值到另一个变量,此时这两个变量同时持有一个变量,当一个变量修改对象的值时,另一个变量也会发生改变。这种现象操作别名现象,并且这种现象发生在参数列表中。
代码:

Tank tank1 = new Tank();
Tank tank2 = new Tank();
tank1.level=10;
tank2.level=20;
System.out.println("tank1.level = "+tank1.level); //tank1.level = 10
System.out.println("tank2.level = "+tank2.level); //tank2.level = 20
//
System.out.println("-----------------------");
tank2=tank1;
System.out.println("tank1.level = "+tank1.level); //tank1.level = 10
System.out.println("tank2.level = "+tank2.level); //tank2.level = 10
//
System.out.println("-----------------------");
tank2.level=30;
System.out.println("tank1.level = "+tank1.level); //tank1.level = 30
System.out.println("tank2.level = "+tank2.level); //tank2.level = 30
    public static void example2()
    
        Tank tank = new Tank();
        tank.level=10;
        System.out.println("tank.level = "+tank.level);
        //
        change(tank);
        System.out.println("tank.level = "+tank.level);
    

    public static void change(Tank tank)
    
        tank.level = 99;
    

3 算数操作符

代表:+、-、*、/、%
说明:算数操作符在基本情况下都是二元操作符,操作符同时接受两个参数进行算数操作。算数操作符只能操作基本数据类型,但是+除外,+和+=可以操作字符串类型数据。
简化:二元操作符具有简化效果: += -= *= /= %=,这些操作符的效果为:a+=b 等同于 a=a+b
注意:/(除以操作符):整数相除获取的是得到小数的整数部分,直接舍去小数部分,不进行四舍五入。

3.1 一元算数操作符

种类:- +
说明:一元算数操作符将类型小于int的变量,直接转换成int类型,然后进行正负处理后返回。
代码:

short a = 4;
int x = +a;
System.out.println(x); //输出4
int y = (-a); 
System.out.println(y); //输出-4

4 递增递减操作符

种类: ++ –
方式:前置递增减操作符(++i,–i)、后置递增减操作符(i++,i–)
递增递减操作符的作用主要是对数据本身进行+1(int) 或者 -1(int)。前置递增减操作符先对数据进行+1/-1后再执行其他代码,后置递增减操作符在其他代码执行完成后,进行+1/-1
代码:

    public static void example()
    
        int i=1;
        System.out.println(i);      //1
        System.out.println(++i);    //2
        System.out.println(i);      //2
        System.out.println(i++);    //2
        System.out.println(i);      //3
        System.out.println(--i);    //2
        System.out.println(i);      //2
        System.out.println(i--);    //2
        System.out.println(i);      //1
    

5 关系操作符

种类:<,>,<=,>=,==,!=
说明:关系操作符是二元操作符,返回值是Boolean(true/false)
关系操作符在比较两个基本数据类型时,比较的是两个基本类型的值,如果在比较两个对象时,则比较的是两个对象的引用的值,而不是对象的值。这是因为基本类型会直接将值写入到引用中,而对引用的值是一个对象的内存地址,因此会出现两个内容一样的对象,却不想等的情况。
代码:

 public static void main(String[] args)
    
        example1();
        example2();
    

    public static void example1()
    
        int a= 10;
        int b=10;
        System.out.println(a==b);       //true
    

    public static void example2()
    
        Example example1 = new Example();
        example1.level=1;
        Example example2 = new Example();
        example2.level=1;
        System.out.println(example1 == example2);       //false
    

    static class Example
        int level;
    

6 逻辑操作符

种类:&&(与)、||(或)、!(非)
说明:&&和||是二元操作符,即可接受两个参数,但是不支持&&=这种操作;而!是一元操作符,只接受一个参数。
&&:当左右两个变量同时为true时,返回true值。
||:当左右两个变量有一个为true时,则返回true
!:当变量为true时,返回false,当变量为false时,返回true。

6.1 短路

短路是指当能确定一个表达式成立时,则不再进行下一个表达式的判断。适用场景为:
(1)当&&的第一个表达式为false,则说明&&肯定返回false,则直接返回false,不判断第二个表达式
(2)当||的第一个表达式为true,则说明||肯定返回true,则直接放回true,不再判断第二个表达式。

7 直接常量

说明:直接常量是指在使用常量时,有时无法分辨常量的具体类型,因此直接使用带有表示的常亮,这种带有标示的常亮叫做直接常量。
例如:
(1)Long类型
long类型数据有三种表示方式:末尾带l、末尾带L、末尾不带

long a = 100;
long b = 100l;
long c = 100L;

(2)Double类型
double类型的三种表达方式:末尾带有d,末尾带有D,末尾不带任何字符

float a = 100float b = 100d;
float c = 100D;

(3)Float类型
float类型的是三种直接常量:末尾带有f,末尾带有F,末尾不带

float a = 100;
float b = 100f;
float c = 100F;

(4)八进制流行
八进制的直接常量表示方法为:0开始,后面每一个为0-7的数字

int 10 = 013;

(5)十六进制类型
十六进制的直接常量表示方法为:0x开始,没面的每一位为0-9,a-f的一位

int 20 = 0x14;

8 按位操作符

种类:&(与) |(或) ^(异或) ~(非)
说明:
(1)&
二元操作符,当两个bit位上的值都为1时,则返回1
(2)^
二元操作符,当两个bit位上的值有的为1,且不全为1(意思就说该位置上有1有0)时,则返回1
(3)|
二元操作符,当两个bit位上的有一个为1时,则返回1
(4)~
一元操作符,当该位置为1时,返回0,当该位置为0时返回1。

9 位移操作符

种类:>>,<<.>>>
说明:
(1)<<
二元操作符,将左变量向左移动右变量数值个位数,可是使用 >>=
左移操作符将所有为向左移动n为,并且在末尾填充0。
左移操作符的效果是:数值*2
(2)>>
二元操作符,将左变量向右移动右变量数值个位数,可是使用<<=
右移操作符根据数据正负值进行填充,当数据为正数是,则在高位填充0,当数据为负数时,则在高位填充1。
右移操作符的效果是: 数值/2
(3)>>>
二元操作符,该左移操作符是Java独有的,可以使用>>>=
该操作符无论操作数是正是负,都会在右移操作后直接在高位填充0.
该操作符会在操作负数时会将负数操作成正数,效果需要具体实验。

10 字符串+和+=

这个操作符是算数操作符中唯一可以操作非基本数据类的操作符。
用作:将两个字符串进行拼接,当拼接时如果有变量不是String类型,则转换成String类型进行拼接。而+=则是追加效果(是效果,而不是对象真正的追加)

11 类型转换操作符

种类:(Class)
当我们使用大类型转小类型(double转int)或者父类型转子类型时,需要显示的使用类型转换操作符号,因为这两种类型转换可能会带有数据的丢失,因此需要进行显示的转换。
代码:

int a = (int)10.0d;
int b = (int)1.f;
Object o = new Object();
String c = (String)o;

12 副作用

副作用的含义是指:当一个操作符操作数据后修改了变量的值,这种操作符很少,一共两种:
(1)赋值号(=)
赋值号是专门用来修改变量值的符号,因此具有副作用
(2)++/–
递增递减操作符可以对变量的值进行+1或者-1,就是修改了原来的对象的值,而不是产生一个新的值。


以上是关于Java 操作符的主要内容,如果未能解决你的问题,请参考以下文章

java位运算

java运算符

Java 高位低位

JAVA:输出一个整数的每一位,如:123的每一位是1 , 2 , 3

JAVA:输出一个整数的每一位,如:123的每一位是1 , 2 , 3

Java-位运算