Java 运算符

Java 位运算符

位运算符主要针对二进制,主要包括:“与”、“非”、“或”、“异或”

  • 与(&), 两个操作数中位都为1,结果才为1,否则结果为0
  • 非(~), 两个位只要有一个为1,那么结果就是1,否则就为0
  • 或(|), 如果位为0,结果是1,如果位为1,结果是0
  • 异或(^), 两个操作数的位中,相同则结果为0,不同则结果为1

与 操作

public class Test
{
  public static void main(String[] args) {
    int a=4;
    int b=4;
    //
    System.out.println("a 和b 与的结果是:"+(a&b));
  }
}

运行结果

a 和b 与的结果是:4

“a”的值是4,转换成二进制就是100,而“b”的值是4,转换成二进制就是100。 根据与运算符的运算规律,可以知道结果就是100,即4。

或 操作

public class Test
{
  public static void main(String[] args) {
    int a=4;
    int b=4;
    //
    System.out.println("a 和b 或的结果是:" + (a | b));
  }
}

运行结果

a 和b 与的结果是:4

“a”的值是4,转换成二进制就是100,而“b”的值是4,转换成二进制就是100。 根据与运算符的运算规律,可以知道结果就是100,即4。

非 操作

public class Test
{
  public static void main(String[] args) {
    int a = 2;
    System.out.println("a 非的结果是:"+(~a));
  }
}

运行结果

a 非的结果是:-3

异或操作

public class Test
{
  public static void main(String[] args) {
    int a=5;
    int b=10;
    System.out.println("a 与 b 异或的结果是:"+(a^b));
  }
}

运行结果

a 与 b 异或的结果是:15

Java 一元运算符

  • 【-】表示 改变数值的符号,取反
  • 【~】表示 逐位取反,属于位运算符
  • 【++】 表示 自加1
  • 【--】 表示 自减1
public class Test
{
  public static void main(String[] args) {
    int a = 1;
  	System.out.println("a ++ 在后 => " + (a++));
  	System.out.println("a ++ 在前 => " + (++ a));

  	int b = 10;
  	System.out.println("b -- 在后 => " + (b --));
  	System.out.println("b -- 在前 => " + (-- b));
  }
}

运算结果为

a ++ 在后 => 1
a ++ 在前 => 3
b -- 在后 => 10
b -- 在前 => 8

注意:

++在前表示先运算后给出结果,++在后表示执行完成后再执行运算,以备下次使用 --也是同理的

Java 算术运算符

  • 加法 +
  • 减法 -
  • 乘法 *
  • 除法 /
  • 取模 %
public class Test
{
  public static void main(String[] args) {
    System.out.println("加法 = " + (4 + 4));
    System.out.println("减法 = " + (4 - 4));
    System.out.println("乘法 = " + (4 * 4));
    System.out.println("除法 = " + (4 / 4));
    System.out.println("取模 = " + (4 % 4));
  }
}

运算结果

加法 = 8
减法 = 0
乘法 = 16
除法 = 1
取模 = 0

Java 移位运算符

  • 【<<】 左移运算符,将运算符左边的对象向左移动运算符右边指定的位数(在低位补0)
  • 【>>】 "有符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。 使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1.
  • 【>>>】 "无符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。 采用0扩展机制,也就是说,无论值的正负,都在高位补0.
public class Test
{
  public static void main(String[] args) {
    System.out.println(Integer.toBinaryString(3333));   
    System.out.println(Integer.toBinaryString(-3333));   
    System.out.println(Integer.toBinaryString(3333>>6));   
    System.out.println(Integer.toBinaryString(-3333>>6));   
    System.out.println(Integer.toBinaryString(3333>>>6));   
    System.out.println(Integer.toBinaryString(-3333>>>6));   
    System.out.println(Integer.toBinaryString(3333<<6));   
    System.out.println(Integer.toBinaryString(-3333<<6));  
  }
}

运算结果为

110100000101
11111111111111111111001011111011
110100
11111111111111111111111111001011
110100
11111111111111111111001011
110100000101000000
11111111111111001011111011000000

Java 关系运算符

  • 【<】 小于
  • 【>】 大于
  • 【<=】 小于等于
  • 【>=】 大于等于
  • 【==】 等于
  • 【!=】 不等于
public class Test
{
  public static void main(String[] args) {
    System.out.println(" 4 > 3 ? " + (4 >3));   
    System.out.println(" 4 < 3 ? " + (4 <3));
    System.out.println(" 4 >= 3 ? " + (4 >= 3));
    System.out.println(" 4 <= 3 ? " + (4 <= 3));
    System.out.println(" 4 == 3 ? " + (4 == 3));
    System.out.println(" 4 != 3 ? " + (4 != 3));

    String a = "aaaaaaa";
    System.out.println("a instanceof String(类名) ? " + (a instanceof String));

    Thread thread = new Thread();
    System.out.println("thread instanceof Runnable(接口名) ? " + (thread instanceof  Runnable));
  }
}

输出结果为

4 > 3 ? true
4 < 3 ? false
4 >= 3 ? true
4 <= 3 ? false
4 == 3 ? false
4 != 3 ? true
a instanceof String(类名) ? true
thread instanceof Runnable(接口名) ? true

  • 上面例子中的instanceof用于判断一个引用类型所引用的对象是否是一个类的实例。 操作符左边的操作元是一个引用类型,右边的操作元是一个类名或者接口;
  • 关系运算符产生的结果都是布尔型的值 true | false;
  • 特别需要关注的是:关系运算符中的"=="和"!="既可以操作基本数据类型,也可以操作引用数据类型。操作引用数据类型时,比较的是引用的内存地址。所以在比较非基本数据类型时,应该使用equals方法。