49天精通Java,第3天,java运算符简介

目录

 

一、变量

二、常量

三、运算符

四、数学函数

五、自增和自减

六、二元运算符

七、三元运算符

八、位运算符

1、与运算符 &

2、或运算符 |

3、非运算符 ~

4、异或运算符 ^

5、左移运算符>>、右移运算符<<

6、>>>运算符会用0填充高位,不存在<<<运算符。

九、运算符的优先级


一、变量

声明一个变量后,必须用赋值语句对变量进行显示初始化。

初始化的方式

String name;
name = "哪吒";
String name = "哪吒";

二、常量

在java中用final修饰表示常量。

final String CSDN_NEZHA = "哪吒";

常量不可变,只能被赋值一次。

java规范上,常量一般使用全大写的形式。

三、算术运算符

Java中的算术运算符包括以下5种:

  1. 加法运算符(+):将两个数相加,例如x + y。
  2. 减法运算符(-):将第一个数减去第二个数,例如x - y。
  3. 乘法运算符(*):将两个数相乘,例如x * y。
  4. 除法运算符(/):将第一个数除以第二个数,例如x / y。
  5. 取模运算符(%):求第一个数除以第二个数的余数,例如x % y。

需要注意的是,在进行除法运算时,如果除数为0,会抛出ArithmeticException异常。而在取模运算时,如果被除数为负数,则结果也为负数。

此外,Java还提供了自增运算符(++)和自减运算符(--),用于将变量的值分别增加或减少1,例如i++或j--。需要注意的是,自增和自减可以用前缀形式(如++i或--j)或后缀形式(如i++或j--)来完成,它们之间的区别是前缀形式先完成自增或自减操作,再返回结果,而后缀形式先返回结果,再完成自增或自减操作。

四、数学函数

Java中提供了一些数学函数,位于java.lang.Math类中。这些函数包括以下几种:

Java中提供了一些数学函数,位于java.lang.Math类中。这些函数包括以下几种:

  1. 基本数学函数:abs、max、min。
  2. 指数函数:exp、log、pow。
  3. 三角函数:sin、cos、tan、asin、acos、atan。
  4. 双曲函数:sinh、cosh、tanh、asinh、acosh、atanh。
  5. 随机数函数:random。

这些函数可以直接通过Math类来调用,例如:

package com.guor.test;

import java.util.Random;
import java.util.stream.IntStream;

public class MathTest {

    private static void test01() {
        System.out.println("计算平方根:"+Math.sqrt(16));//4.0
        System.out.println("计算立方根:"+Math.cbrt(27));//3.0
        System.out.println("计算立方根:"+Math.cbrt(21));//2.7589241763811208
        System.out.println("计算a的b次方:"+Math.pow(2, 3));//8.0
        System.out.println("计算最大值:"+Math.max(26, 19));//26
        System.out.println("计算最小值:"+Math.min(26, 19));//19
        System.out.println("取绝对值:"+Math.abs(23.3));//23.3
        System.out.println("取绝对值:"+Math.abs(-23.3));//23.3
    }
    
    private static void test02() {
        System.out.println("90 度的正弦值:" + Math.sin(Math.PI/2));  //1.0
        System.out.println("0度的余弦值:" + Math.cos(0));  //1.0
        
        System.out.println("反余弦值:"+Math.acos(0.1));//1.4706289056333368
        System.out.println("反余弦值:"+Math.acos(0.5));//1.0471975511965979
        System.out.println("反余弦值:"+Math.acos(0.9));//0.45102681179626236
        System.out.println("反余弦值:"+Math.acos(1));//0.0
        System.out.println("反余弦值:"+Math.acos(1.9));//NaN,大于1,输出 NaN
        
        System.out.println("60度的正切值:" + Math.tan(Math.PI/3));  //1.7320508075688767
        System.out.println("1的反正切值: " + Math.atan(1));  //0.7853981633974483
        System.out.println("π/2的角度值:" + Math.toDegrees(Math.PI/2));  //90.0
        System.out.println(Math.PI); //3.141592653589793
        
        //将角度转换为弧度。
        double x = 45.0;
        double y = 30.0;
        System.out.println("将角度转换为弧度:"+Math.toRadians(x) );//0.7853981633974483
        System.out.println("将角度转换为弧度:"+Math.toRadians(y) );//0.5235987755982988
    }
    
    private static void test03() {
        System.out.println("逢余进一:"+Math.ceil(2.66));//3.0
        System.out.println(Math.ceil(10));
        System.out.println("逢余舍一:"+Math.floor(2.66));//2.0
        System.out.println("逢余舍一:"+Math.floor(2.169));//2.0
        
        //返回小于或等于代数商的最大(最接近正无穷大)int值
        System.out.println(Math.floorDiv(10, 15));//0
        System.out.println(Math.floorDiv(15, 10));//1
        System.out.println(Math.floorDiv(25, 10));//2
        
        //四舍五入,返回double值。注意.5的时候会取偶数
        System.out.println(Math.rint(2.6));//3.0
        System.out.println(Math.rint(2.5));//不是3.0,而是2.0
        System.out.println(Math.rint(2.4));//2.0
        System.out.println(Math.rint(3.5));//4.0
        
        //四舍五入,float时返回int值,double时返回long值
        long round2 = Math.round(2.6);
        int round3 = Math.round(3);
        long round4 = Math.round(2.0);
        System.out.println(Math.round(2.6));//3
        long round = Math.round(2.6);
        System.out.println(Math.round(2.6));//3
    }
    
    private static void test04() {
        // 两数相加,并判断是否溢出
        System.out.println(Math.addExact(1, 2));
        System.out.println(Math.addExact(100, 222));
        System.out.println(Math.addExact(Integer.MAX_VALUE, 0));//2147483647
        //System.out.println(Math.addExact(Integer.MAX_VALUE, 1));//java.lang.ArithmeticException: integer overflow
        
        //从指定的变量中减去1并返回它。
        System.out.println(Math.decrementExact(10));//9
        System.out.println(Math.decrementExact(1088));//1087
        
        System.out.println(Math.multiplyExact(10, 2));//20
        
        //exp() 方法用于返回自然数底数e的参数次方
        System.out.println(Math.exp(2.0));
        System.out.println(Math.exp(2.5));
        System.out.println(Math.exp(2.7));
        System.out.println(Math.exp(-22.7));
    }
    
    private static void test05() {
        //复制第二个参数的符号并将其分配给第一个参数
        System.out.println(Math.copySign(10.2, 2.5));//10.2
        System.out.println(Math.copySign(10.2, -2.5));//-10.2
        System.out.println(Math.copySign(-10.2, 0));//10.2,零的符号是正数?也对
        
        //第二个参数的方向上返回与第一个参数相邻的数字。
        System.out.println(Math.nextAfter(10.2, 2.6));//10.199999999999998
        System.out.println(Math.nextAfter(2.6, 10.2));//2.6000000000000005
        System.out.println(Math.nextAfter(10.2, 10.2));//10.2
        
        System.out.println(Math.nextDown(10.5));//10.499999999999998
        System.out.println(Math.nextUp(10.5));//10.500000000000002
        
        //用于返回参数的符号
        System.out.println(Math.signum(10));//1.0
        System.out.println(Math.signum(0));//0.0
        System.out.println(Math.signum(-10));//-1.0
        
        // 返回整数,如果结果溢出,则去掉符号相加或相减
        System.out.println(Math.toIntExact(499)); //499
        System.out.println(Math.toIntExact(Integer.MAX_VALUE)); //2147483647
        System.out.println(Math.toIntExact(Integer.MAX_VALUE+1)); //-2147483648
        System.out.println(Math.toIntExact(Integer.MAX_VALUE+10)); //-2147483639
        
        System.out.println(Math.toIntExact(Integer.MIN_VALUE));//-2147483648
        System.out.println(Math.toIntExact(Integer.MIN_VALUE+10));//-2147483638
        System.out.println(Math.toIntExact(Integer.MIN_VALUE-10));//2147483638
    }
    
    private static void test06() {
        System.out.println("随机数:" + Math.random());// 0.30900647153462657
        Random random = new Random();
        System.out.println(random.nextInt());// -133596410
        System.out.println(random.nextInt(100));// 54,,,100是边界
        
        //返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布的 double值。
        System.out.println(random.nextDouble());//0.14627990739876262
        
        //生成随机字节并将其置于用户提供的 byte 数组中。
        byte[] bytes = new byte[10];
        random.nextBytes(bytes);
    }
    
    public static void main(String[] args) {
        test06();
    }
}

五、自增和自减

x++ 表示当前值+1;

x-- 表示当前值-1;

package com.nezha.javase;

public class Test {
    public static void main(String[] args) {
        int a = 2;
        int b = 3;
        System.out.println(2 * a++);//4
        System.out.println(2 * ++b);//8
    }
}

前缀形式会先完成+1,后缀形式会后完成+1。

建议不要在表达式中使用++,很困惑。

六、二元运算符

Java中的二元运算符是指需要两个操作数才能完成运算的运算符。

常见的二元运算符包括以下几种:

  1. 算术运算符: +(加)、 -(减)、*(乘)、/(除)、%(取模)。
  2. 赋值运算符: =(赋值)、+=(加等于)、-=(减等于)、*=(乘等于)、/=(除等于)、%=(取模等于)等。
  3. 比较运算符: ==(等于)、!=(不等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于)等。
  4. 逻辑运算符: &&(逻辑与)、||(逻辑或)等。
  5. 位运算符: &(按位与)、|(按位或)、^(按位异或)、<<(左移)、>>(有符号右移)、>>>(无符号右移)等。

需要注意的是,在进行二元运算时,如果两个操作数类型不同,则会进行自动类型转换,具体规则可以参考Java中的数据类型转换规则。同时,某些运算符可能会导致溢出或错误,因此在使用时应特别注意数据类型的选择和合理性。

七、三元运算符

Java中的三元运算符是一种条件运算符,其语法格式为:

条件表达式 ? 表达式1 : 表达式2;

其中,条件表达式的求值结果为boolean类型(即true或false),如果为true则返回表达式1的值,否则返回表达式2的值。所以,它也被称为三元条件运算符。

使用三元运算符可以简化代码,例如:

package com.nezha.javase;

public class Test {
    public static void main(String[] args) {
        String name = "哪吒";
        boolean ret = name.equals("哪吒")?true:false;
        System.out.println(name + (ret?"很强":"很弱"));
    }
}

控制台输出:哪吒很强

需要注意的是,虽然三元运算符可以简化代码,但过度使用会导致代码可读性降低,因此应谨慎使用。

八、位运算符

1、与运算符 &

只有两个位都是1,结果才是1

package com.nezha.javase;

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

x 二进制 10000001;

y 二进制 10000000;

根据与运算符的运算规律,只有两个位都是1,结果才是1,可以知道结果就是10000000,即128。

2、或运算符 |

两个位只要有一个为1,那么结果就是1,否则就为0。

package com.nezha.javase;

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

3、非运算符 ~

如果位为0,结果是1,如果位为1,结果是0。

4、异或运算符 ^

两个操作数的位中,相同则结果为0,不同则结果为1。

5、左移运算符>>、右移运算符<<

移位运算符的右操作数要完成模32的运算。

1<<35的值等同于1<<3或8。

public static void main(String[] args) {
    System.out.println(1 <<35);//8
    System.out.println(1<<3);//8
}

6、>>>运算符会用0填充高位,不存在<<<运算符。

九、运算符的优先级

Java中的运算符按照优先级从高到低依次为:

  1. ():括号运算符,具有最高优先级;
  2. !、~、++、--:逻辑非、位取反、自增、自减运算符;
  3. *、/、%:乘、除、取模运算符,优先级相同,从左向右结合;
  4. +、-:加、减运算符,优先级相同,从左向右结合;
  5. <<、>>、>>>:左移、右移、无符号右移运算符,优先级相同,从左向右结合;
  6. <、<=、>、>=:小于、小于等于、大于、大于等于运算符,优先级相同,从左向右结合;
  7. ==、!=:等于、不等于运算符,优先级相同,从左向右结合;
  8. &:按位与运算符,优先级较低;
  9. ^:按位异或运算符,优先级更低;
  10. |:按位或运算符,优先级最低;
  11. &&:逻辑与运算符,优先级较低;
  12. ||:逻辑或运算符,优先级更低;
  13. ?::三元条件运算符,优先级最低;

需要注意的是,运算符优先级只是一种约定,实际使用时应根据具体情况加上括号以明确运算顺序。

本文收录于,Java基础教程系列。

目前已经700+订阅,CSDN最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。

哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师。

你可能感兴趣的:(49天精通Java从入门到就业,java,开发语言,后端)