【Java基础笔记】1-5 运算符

java

本篇主要介绍了 Java 中的常见运算符:算术运算符(含其他数学运算 Math)、赋值运算符、关系运算符、逻辑运算符、位运算符、条件运算符和扩展赋值运算符。

§1-5 运算符

目录

  • §1-5 运算符
    • 1-5.1 算术运算符
      • 1-5.1.1 四则运算
      • 1-5.1.2 扩展赋值运算符
      • 1-5.1.3 模运算
      • 1-5.1.4 自增自减运算符
      • 1-5.1.5 其他数学运算
    • 1-5.2 关系运算符
    • 1-5.3 逻辑运算符
    • 1.5.4 位运算符
    • 1-5.5 条件运算符
    • 1-5.6 扩展:源码、反码与补码

Java 语言支持如下运算符:

  • 算术运算符:+, -, *, /, %, ++, --
  • 赋值运算符:=
  • 关系运算符:>, <, >=, <=, ==, !=, instanceof
  • 逻辑运算符:&&, ||, !
  • 位运算符:&, |, ^, ~, >>, <<, >>>
  • 条件运算符:?, :
  • 扩展赋值运算符:+=, -=, *=, /=

不同运算符所执行的运算有优先级之分,若要强调优先级,可用()括住该运算。

1-5.1 算术运算符

1-5.1.1 四则运算

数学中的加减乘除四则运算在 Java 中也支持,请看下面的例子:

public class Operators {

public static void main(String[] args) {

//二元运算符

int a = 10;

int b = 20;

long c = 123123123123123L;

byte d = 120;

short e = 8;

System.out.println(a+b);

System.out.println(a-b);

System.out.println(a*b);

System.out.println(a/b);

}

}

编译后运行,得到结果如图所示:

可见在运算a/b时,结果本应带有小数,却因为计算结果的数据类型为int而自动舍弃小数,为避免这种情况发生,可在计算时强制转换数据类型,见下:

		System.out.println(a/(double)b);

值得注意的是,默认情况下,计算后的结果的数据类型为整型,但计算时变量数据类型高于整型时,则输出结果为最高级数据类型,以前文给出的例子为例:

		System.out.println(a+b+c+d+e);	//Long

System.out.println(a+b+d+e); //int

从上图可知,四则运算结果默认为整型,而编译后运行结果(分割线下)则体现了上文中 “以参与运算的变量最高数据类型输出”。

1-5.1.2 扩展赋值运算符

扩展赋值运算符是一种赋值时的简易写法。如:

a+=b	//即 a = a + b

a-=b //即 a = a - b

在执行输出语句时,+既可以作字符串连接符,也可以作算术运算符,但若+跟在字符串后,则在不加任何优先级时,其后所有变量都将转换为字符串,并将字符串内容连接。如:

1-5.1.3 模运算

Java 中的模运算,即数学当中的取余。a % bab皆为整型)意为a / b后取其余数,数据类型为整型。

1-5.1.4 自增自减运算符

在前文我们有提到算数运算符中还有++--这两个运算符,它们是自增则减运算符,使用时,a++a = a + 1;同理,a--a = a - 1。但值得注意的是,自增自减运算符的位置不同,它们的执行时机也不同。

public class SelfOps {

public static void main(String[] args) {

//自增自减运算符为一元运算符

int a = 3;

int b = a++;

System.out.println(a);

System.out.println(b);

int c = ++a;

System.out.println(a);

System.out.println(c);

}

}

编译后运行,得到如图所示结果:

当自增自减运算符在后时,先执行代码,后自增 / 自减;当自增自减运算符在前时,先自增 / 自减,后执行代码。

1-5.1.5 其他数学运算

若要对一个数作幂运算、求绝对值等较为复杂的数学运算时,我们需要借助一些工具实现它:Math。快捷输入方式:Math.<运算名>(表达式参数)

public class Maths {

public static void main(String[] args) {

//Math

double pow = Math.pow(2, 3);

System.out.println(pow);

System.out.println("==============");

int abs = Math.abs(-127);

System.out.println(abs);

System.out.println("==============");

double sin = Math.sin(3.14);

System.out.println(sin);

System.out.println("==============");

}

}

编译后运行,得到如图所示结果:

1-5.2 关系运算符

关系运算符判断关系是成立与否后,输出的结果为布尔值,有两种结果:truefalse

public class RelationalOps {

public static void main(String[] args) {

//判断结果输出为布尔值

int a = 10;

int b = 20;

//输出比较

System.out.println(a>b);

System.out.println(a<b);

System.out.println(a==b);

System.out.println(a!=b);

}

}

编译后运行,得到结果如图所示:

1-5.3 逻辑运算符

Java 语言中支持如下逻辑运算符:与(and, &&)、或(or, ||)、非(not, !)

请看下方的例子:

public class LogicalOps {

public static void main(String[] args) {

//逻辑运算符

boolean a = true;

boolean b = false;

//输出结果:逻辑运算

System.out.println("a && b :"+(a && b)); //与运算:同真才为真

System.out.println("a || b :"+(a || b)); //或运算:有一真为真,同假为假

System.out.println("!( a && b ): "+(!(a && b))); //取反:真时得假,假时得真

}

}

编译后运行,得到结果如图所示:

其中,+起到连接字符串的作用,是字符串连接符。

在运用逻辑运算符时,有一个特性值得我们注意。请看下面例子:

		int c = 5;

boolean d = (c<4) && (c++<4); //结果一定为 false

System.out.println(c); //变量 c 的值没有发生变化:短路运算

System.out.println(d);

编译后运行,得到如图所示结果:

解释:在上述例子中,d永远为false,因为其表达的与运算中的第一个条件c<4已经为false,则整条式子计算后结果为false。此时,与运算符后的条件c++<4没有执行,被跳过,因而该计算被 “短路” ,c的结果仍为5。

注:短路计算常用于与运算中。

1.5.4 位运算符

Java 中有如下常见位运算符:&|^~,左移右移运算符<<>>(仅用于整型)。

其意义见下:

/*

A = 0011 1100

B = 0000 1101

==========================

位运算符:

A & B = 0000 1100 类似于与运算,相同位都为1时才取1(同真为真,其余为假)

A | B = 0011 1101 类似于或运算,相同位有1取1(有一真为真,同假取假)

A ^ B = 0011 0001 异或运算,相同位相同为0,不同取1(同假异真)

~ B = 1111 0010 取反,依次按位取反

==========================

左移右移运算符:

思考一个问题:2 * 8 如何计算效率最高?

在二进制中:

2 = 0000 0010

3 = 0000 0011

4 = 0000 0100

8 = 0000 1000

16= 0001 0000

2 * 8 = 2 * 2 * 2 * 2 = 2 << 3 = 16

可如此简单理解:

a << b = a * (2^b)

a >> b = a / (2^b)

*/

我们可以尝试2 << 3并查看结果:

1-5.5 条件运算符

条件运算符用法:x ? y : z

上述语句意思为:若变量xtrue,则执行y,否则执行z,这是一个三元运算符

请看例子:

1-5.6 扩展:源码、反码与补码

详细内容请参见:原码, 反码, 补码 详解

作者:张子秋

出处:http://www.cnblogs.com/zhangziqiu/

以上是 【Java基础笔记】1-5 运算符 的全部内容, 来源链接: utcz.com/z/390461.html

回到顶部