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 = 100;
float 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:输出一个整数的每一位,如:123的每一位是1 , 2 , 3