8%程序猿8%程序猿11-13 15:57

Java运算符

在Java中,使用算术运算符 ‘+’,‘-’,‘*’,‘/’表示加,减,乘,除运算。其中需要注意的是参数‘/’的两个数是整数时,表示整数除法,否则,表示浮点除法。整数的求余操作用‘%’表示,比如说:

public class Demo {

    public static void main(String[] args) {

        int num = 15;

        double d = 15.0;

        System.out.println("整数求余:" + num % 2);  // 整数求余:1

        System.out.println("浮点数整除:" + d / 2);  // 浮点数整除:7.5
    }
}
  • 警告:整数被0除将产生一个异常,而浮点数被0除则会得到一个无穷大或者NaN;像这样:
Exception in thread "main" java.lang.ArithmeticException: / by zero
	at com.ytuan.Main.main(Main.java:26)
public class Demo {

    public static void main(String[] args) {

        double d = 15.0;

        System.out.println("浮点数被0除:" + d % 0);  // 浮点数被0除:Infinity
		System.out.println("浮点数被0取余:" + d % 0); // 浮点数被0取余:NaN
    }
}

数学函数与常量

在JDK中,为我们提供了Math类,实现了各种各样的数学函数,我们可以根据自己的需要进行调用:

  • 计算一个数的平方根:Math.sqrt(double x);
  • 幂运算:Math.pow(double x, double a);

更多方法查看JDK源码吧

数值类型之间的转换

在开发中,我们经常需要将一种数据类型转换为另一中数据类型,在精度允许的情况下我们可以合法转换,如下是合法的: 合法数据类型转换

不同的两种数据类型进行二元操作运算时,数据类型的转换规则如下:

  • 其中一个是double类型,那么另外一个也会转为double类型再计算;
  • 否则,其中一个是float类型,那么另一个会转换为float类型再计算;
  • 否则,其中一个是long类型,那么另一个会转换为long类型再计算;
  • 否则,两个都会转换为int类型再计算;

测试一下:

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

        double d = 3.14;
        float f = 3.2f;
        long l = 5L;
        int i = 4;
        short s = 2;
        byte b = 1;
        char c = 'A';

        System.out.println("包含double的二元操作:" + (d + i));
        System.out.println("包含float的二元操作:" + (f + s));
        System.out.println("包含long的二元操作:" + (l + i));
        System.out.println("包含int的二元操作:" + (i + b));
        System.out.println("不包含int的二元操作:" + (b + c));
    }
}

运行结果:

包含double的二元操作:7.140000000000001
包含float的二元操作:5.2
包含long的二元操作:9
包含int的二元操作:5
不包含int的二元操作:66

强制数据类型转换

在一般情况下,数据类型会向精度高的数据类型自动转换,但是在一些特殊情况下也会向精度低的转换,那么此时就是遇到强制数据类型转换,在这种情况下,可能会丢失一部分数据信息,强制数据类型转换的语法格式为在‘()’中填写目的数据类型,后面紧跟待转换的变量名;像这样:

double d = 3.14;
int i = (int) d;  // i = 3
  • 强制数据类型转换通过截取浮点数据的小数部分得到整数类型,注意不是四舍五入哦;
  • 如果想要得到最接近的整型,那么需要调用long Math.round(x)方法;
  • 如果将一个数据类型转换为另一种数据类型,而又超出了该数据类型本身的取值范围,那么就会截取到一个不完整的值;尽量避免这样!!!
  • 不要让boolean类型和别的数据类型强制转换,如果需要,那么可以使用三元运算符表示:b ? 1:0;

结合赋值和运算符

可以在赋值中使用二元运算符,这样看起来比较简洁,像这样:

public class Demo{
	public static void main(String[] args) {
		int i = 2;
		int t = i += 3; //  相当于 t = i + 3;
		System.out.println(t); // 5
	}
}
  • 除此之外,还有 '-=', '*=', '/+','%=';都是类似的用法;

自增和自减运算符

将某个变量的值加1或者减1,是开发中常见的操作,在Java中,提供了'n++', 'n--'这样简单的操作;

int i = 1;
i++;
  • 这里需要注意的是'前缀'和'后缀的区别':'前缀'会先完成自加1,'后缀'则是会使用原来的值,然后再自加1;举个例子(??):
int m = 17;
int n = 17;

int a = 2 * ++m;// a = 36; m = 18;
int b = 2 * n++; // b = 34; n = 17; 

关系和boolean运算符

Java中提供了丰富的关系运算符号:

运算符 含义 备注
== 相等
!= 不相等
< 小于
> 大于
<= 小于等于
>= 大于等于
&& 逻辑与 短路,如果第一个表达式得到结果,则终止
|| 逻辑或 短路,如果第一个表达式得到结果,则终止
?: 三元运算符

位运算符号

针对整数数据,可以直接操作整型数值的各个位,使用掩码技术,位运算包括以下:

运算符 含义 备注
& and
| or
^ xor( 异或)
~ not(取反)
>> 右移
<< 左移
>>> 右移
  • 警告:不存在 '<<<' 运算符;

括号与运算符级别

没有括号时,一般情况下都从左到右计算,但是如果包含结合运算符,如'+=','++','>>=',那么就会从右到左;有括号那么先计算括号的内容;

枚举类型

有的时候,变量的取值只在一个有限的集合内,那么此时我们就可以自定义枚举类型:语法格式如下:

enum Size {
	SAMLL, MEDIUM, LARGE,EXTRA_LAGER
}

那么此时对呀Size的取值就只能是SAMLL, MEDIUM, LARGE,EXTRA_LAGER;或者为null;

程序之家二维码

小额赞赏

000
评论