目录
一、变量
二、常量
三、运算符
四、数学函数
五、自增和自减
六、二元运算符
七、三元运算符
八、位运算符
1、与运算符 &
2、或运算符 |
3、非运算符 ~
4、异或运算符 ^
5、左移运算符>>、右移运算符<<
6、>>>运算符会用0填充高位,不存在<<<运算符。
九、运算符的优先级
声明一个变量后,必须用赋值语句对变量进行显示初始化。
初始化的方式
String name;
name = "哪吒";
String name = "哪吒";
在java中用final修饰表示常量。
final String CSDN_NEZHA = "哪吒";
常量不可变,只能被赋值一次。
java规范上,常量一般使用全大写的形式。
Java中的算术运算符包括以下5种:
需要注意的是,在进行除法运算时,如果除数为0,会抛出ArithmeticException异常。而在取模运算时,如果被除数为负数,则结果也为负数。
此外,Java还提供了自增运算符(++)和自减运算符(--),用于将变量的值分别增加或减少1,例如i++或j--。需要注意的是,自增和自减可以用前缀形式(如++i或--j)或后缀形式(如i++或j--)来完成,它们之间的区别是前缀形式先完成自增或自减操作,再返回结果,而后缀形式先返回结果,再完成自增或自减操作。
Java中提供了一些数学函数,位于java.lang.Math类中。这些函数包括以下几种:
Java中提供了一些数学函数,位于java.lang.Math类中。这些函数包括以下几种:
这些函数可以直接通过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中的二元运算符是指需要两个操作数才能完成运算的运算符。
常见的二元运算符包括以下几种:
需要注意的是,在进行二元运算时,如果两个操作数类型不同,则会进行自动类型转换,具体规则可以参考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
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。
两个位只要有一个为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
}
}
如果位为0,结果是1,如果位为1,结果是0。
两个操作数的位中,相同则结果为0,不同则结果为1。
移位运算符的右操作数要完成模32的运算。
1<<35的值等同于1<<3或8。
public static void main(String[] args) {
System.out.println(1 <<35);//8
System.out.println(1<<3);//8
}
Java中的运算符按照优先级从高到低依次为:
需要注意的是,运算符优先级只是一种约定,实际使用时应根据具体情况加上括号以明确运算顺序。
本文收录于,Java基础教程系列。
目前已经700+订阅,CSDN最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。
哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师。