一、Java Number 类
拿int和Integer做例子进行对比:
- Integer是int的包装类;int是基本数据类型;
- Integer变量必须实例化后才能使用;int变量不需要;
- Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ;
- Integer的默认值是null;int的默认值是0;
通过上面我们可以知道,int除了存储数据值不能有更多的功能。就拿现实中考试成绩来说,一个人的成绩可能为0,这是他一点都不写的情况;有可能是null,这是他去都没去的情况;其余的任意值是动笔的情况。这个时候我们就不能通过int进行判断,需要Integer一个score变量,通过对score是否为0/null/{1.......100}这些取值,分析出他是否缺考。Integer可以区分出未赋值和值为0的区别,适合作为web层的表单数据的类型,int则无法表达出未赋值的情况。
1.1深入对比,参考资料大致分为四种情况
Integer i = new Integer(100);
Integer j = new Integer(100);
System.out.print(i == j); //false
/*(1)两个通过new生成的Integer变量永远是不相等的(因为new生成的是两个对象,其内存地址不同)*/
Integer i = new Integer(100);
int j = 100;
System.out.print(i == j); //true
/*(2)通过自动拆箱机制,只要两个变量的值是相等的,则结果为true*/
Integer i = new Integer(100);
Integer j = 100;
System.out.print(i == j); //false
/*(3)非new生成的Integer变量指向的是静态常量池中cache数组中存储的指向
了堆中的Integer对象,而new Integer()生成的变量指向堆中新建的对象,两
者在内存中的对象引用(地址)不同。*/
Integer i = 100;
Integer j = 100;
System.out.print(i == j); //true
Integer i = 128;
Integer j = 128;
System.out.print(i == j); //false
/**(4)两个非new生成的Integer对象进行比较时,值在区间-128到127之间,则比较结果为true,
如果两个变量的值不在此区间,则比较结果为false。原因:java在编译Integer i = 100 ;时,
会翻译成为Integer i = Integer.valueOf(100)。而java API中对Integer类型的valueOf的
定义如下,对于-128到127之间的数,会进行缓存,Integer i = 127时,会将127这个Integer
对象进行缓存,下次再写Integer j = 127时,会直接从缓存中取,超过此范围后,每次装箱就会
新建一个Integer对象*/
1.2自动拆箱/装箱机制
//自动拆箱:将对象重新转化为基本数据类型,计算时将num直接拆箱成int,计算打印出8
public class Test {
public static void main(String[] args) {
/ /声明一个Integer对象
Integer num = 9;
// 进行计算时隐含的有自动拆箱
System.out.print(num--);
}
}
/*自动装箱:将基本数据类型重新转化为对象,声明一个Integer对象,用到了自动
装箱:解析为:Integer num = Integer.valueOf(9);*/
public class Test {
public static void main(String[] args) {
Integer num = 9;
}
}
//因为对象不能直接进行运算,需要转化为基本数据类型后才能进行加减乘除
// 装箱
Integer num = 10;
// 拆箱
int num1 = num;
二、Java Math 类
Java 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数等。Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用。
public class Test {
public static void main (String []args)
{
System.out.println("90 度的正弦值:" + Math.sin(Math.PI/2));
System.out.println("0度的余弦值:" + Math.cos(0));
System.out.println("60度的正切值:" + Math.tan(Math.PI/3));
System.out.println("1的反正切值: " + Math.atan(1));
System.out.println("π/2的角度值:" + Math.toDegrees(Math.PI/2));
System.out.println(Math.PI);
}
}
/*90 度的正弦值:1.0
0度的余弦值:1.0
60度的正切值:1.7320508075688767
1的反正切值: 0.7853981633974483
π/2的角度值:90.0
3.141592653589793
*/
三、Java Number & Math 类方法
3.1 Java xxxValue() 方法
Integer x = 5;
System.out.println(x.doubleValue());
// 返回 double 原生数据类型:5.0
3.2 Java compareTo() 方法
/* 可以用来比较相同数据类型,返回值分三种:如果指定的数与参数相等返回 0;
如果指定的数小于参数返回 -1;如果指定的数大于参数返回 1 */
Integer x = 5;
System.out.println(x.compareTo(3));
System.out.println(x.compareTo(5));
System.out.println(x.compareTo(8));
/*1
0
-1*/
3.3 Java equals() 方法
//用于判断 Number 对象与方法的参数是否相等
Integer x=5;
Integer y=10;
Integer z=5;
Short a=5;
System.out.prntln(x.equals(y));
System.out.prntln(x.equals(z));
System.out.prntln(x.equals(a));
/*false
true
false
*/
3.4 Java valueOf() 方法
Integer x =Integer.valueOf(9);
//1、Integer valueOf(int i):返回一个表示指定的 int 值的 Integer 实例
Double c = Double.valueOf(5);
//2、Integer valueOf(String s):返回保存指定的 String 的值的 Integer 对象
Float a = Float.valueOf("80");
/*3、Integer valueOf(String s, int radix): 返回一个 Integer 对象,
该对象中保存了用第二个参数提供的基数进行解析时从指定的 String 中提取的值 */
Integer b = Integer.valueOf("444",16); // 使用 16 进制
System.out.println(x);
System.out.println(c);
System.out.println(a);
System.out.println(b);
/*9
5.0
80.0
1092
*/
3.5 Java toString() 方法
Integer x = 5;
System.out.println(x.toString()); //1、toString(): 返回表示 Integer 值的 String 对象
//2、toString(int i): 返回表示指定 int 整数的 String 对象
System.out.println(Integer.toString(12));
/*
5
12
*/
public class CeShi1{
public static void main(String[] args){
Ren1 r1 = new Ren1("YL",23);
System.out.println(r1.toString());
}
}
class Ren1{
String mingZi1;
int nianLing1;
public Ren1(String mingZi1, int nianLing1){
this.mingZi1 = mingZi1;
this.nianLing1 = nianLing1;
}
public String toString(){
return "姓名:" + mingZi1 + "\n" +"年龄:" + nianLing1;
}
}
/*
姓名:YL
年龄:23
*/
public class CeShi2{
public static void main(String[] args){
Ren r2 = new Ren2("YL",23);
System.out,println("姓名:" + r2.mingZi2 + "\n" + "年龄:" + r2.nianLing2);
}
class Ren2{
String mingZi2;
int nianLing2;
public Ren(String mingZi2, int nianLing2){
this.mingZi2 = mingZi2;
this.nianLing2 = nianLing2;
}
}
}
3.6 Java parseInt() 方法
//1、parseInt(String s): 返回用十进制参数表示的整数值
int x =Integer.parseInt("9");
double c = Double.parseDouble("5");
//2、parseInt(int i): 使用指定基数的字符串参数表示的整数 (基数可以是 10, 2, 8, 或 16 等进制数)
int b = Integer.parseInt("444",16);
/*
9
5.0
1092
*/
3.7 Java abs() 方法
//任何原生数据类型,返回参数的绝对值
Integer a = -8;
double d = -100;
float f = -90f;
System.out.println(Math.abs(a));
System.out.println(Math.abs(d));
System.out.println(Math.abs(f));
/*
8
100.0
90.0
*/
3.8 Java ceil() 方法
//可对一个数进行上舍入,返回值大于或等于给定的参数,类型为双精度浮点型
double d = 100.675;
float f = -90;
System.out.println(Math.ceil(d));
System.out.println(Math.ceil(f));
//floor()下舍入
System.out.println(Math.floor(d));
System.out.println(Math.floor(f));
/*
101.0
-90.0
100.0
-90.0
*/
3.9 Java floor() 方法
参考3.8
3.10 Java rint() 方法
//double 类型数据,返回最接近参数的整数值
double e = 100.500;
System.out.println(Math.rint(e)); //100.0 下取整
3.11 Java round() 方法
round() 方法返回一个最接近的 int、long 型值,四舍五入。
round 表示“四舍五入”,算法为Math.floor(x+0.5) ,即将原来的数字加上 0.5 后再向下取整,所以 Math.round(11.5) 的结果为 12,Math.round(-11.5) 的结果为 -11
3.12 Java min() 方法
double min(double arg1, double arg2)
float min(float arg1, float arg2)
int min(int arg1, int arg2)
long min(long arg1, long arg2)
//返回两个参数中的最小值
System.out.println(Math.min(12.123, 12.456));// 12.123
3.13 Java max() 方法
参考3.12,返回两个参数中的最大值
3.14 Java exp() 方法
//返回自然数底数e的参数次方
double x = 11.635;
System.out.printf("exp(%.3f) 为 %.3f%n", x, Math.exp(x)); //exp(11.635) 为 112983.831
3.15 Java log() 方法
参考3.14,取e为底的对数值
3.16 Java pow() 方法
//返回第一个参数的第二个参数次方
double x = 11.635;
double y = 2.76;
System.out.printf("pow(%.3f, %.3f) 为 %.3f%n", x, y, Math.pow(x, y));
// pow(11.635, 2.760) 为 874.008
3.17 Java sqrt() 方法
//返回参数的算术平方根
double x = 11.635;
System.out.printf("sqrt(%.3f) 为 %.3f%n", x, Math.sqrt(x));
// sqrt(11.635) 为 3.411
3.18 Java sin() 方法
//返回指定double类型参数的正弦值。
double degrees = 45.0;
double radians = Math.toRadians(degrees);//把角度转换为弧度
System.out.format("%.1f 度的正弦值为 %.4f%n", degrees, Math.sin(radians));
//45.0 度的正弦值为 0.7071
3.19 Java cos() 方法
参考3.18,返回余弦值
3.20 Java tan() 方法
参考3.18,返回正切值
3.21 Java asin() 方法
//返回指定double类型参数的反正弦值
double degrees = 45.0;
double radians = Math.toRadians(degrees);
System.out.format("%.4f 的反正弦值为 %.4f 度 %n", Math.sin(radians),
Math.toDegrees(Math.asin(Math.sin(radians))));
//0.7071 的反正弦值为 45.0000 度;这里先把45度转为正弦值,再从正弦值计算得到反正弦值
System.out.format("%f\n",pi);//"f"表示格式化输出浮点数
System.out.format("%d\n",i);//"d"表示格式化输出十进制整数
System.out.format("%o\n",i);//"o"表示格式化输出八进制整数
System.out.format("%x\n",i);//"x"表示格式化输出十六进制整数
System.out.format("%s\n",str);//"s"表示格式化输出字符串
3.22 Java acos() 方法
参考3.21,返回反余弦值
3.23 Java atan() 方法
参考3.21,返回反正切值
3.24 Java atan2() 方法
/**
atan2() 方法用于将矩形坐标 (x, y) 转换成极坐标 (r, theta),返回所得角 theta。
该方法通过计算 y/x 的反正切值来计算相角 theta,范围为从 -pi 到 pi
*/
double x = 45.0;
double y = 30.0;
System.out.println( Math.atan2(x, y) );
3.25 Java toDegrees() 方法
//将参数转化为角度
double x = 45.0;
System.out.println( Math.toDegrees(x) );
//2578.3100780887044
3.26 Java toRadians() 方法
//将角度转换为弧度
double x = 45.0;
System.out.println( Math.toRadians(x) );
//0.7853981633974483
3.27 Java random() 方法
//用于返回一个随机数,随机数范围为 0.0 =< Math.random < 1.0
System.out.println( Math.random() );
//0.5444085967267008 ————随机输出,Math.random()是固定用法
速查:
参考资料:菜鸟教程 - 学的不仅是技术,更是梦想!