Java Number & Math ç±»
一般地,当需è¦�使用数å—的时候,我们通常使用内置数æ�®ç±»åž‹ï¼Œå¦‚:byteã€�intã€�longã€�double ç‰ã€‚
实例
然而,在实际开å�‘过程ä¸ï¼Œæˆ‘们ç»�常会é�‡åˆ°éœ€è¦�使用对象,而ä¸�是内置数æ�®ç±»åž‹çš„æƒ…形。为了解决这个问题,Java è¯è¨€ä¸ºæ¯�一个内置数æ�®ç±»åž‹æ��供了对应的包装类。
所有的包装类(Integerã€�Longã€�Byteã€�Doubleã€�Floatã€�Short)都是抽象类 Number çš„å�类。
| 包装类 | 基本数�类型 |
|---|---|
| Boolean | boolean |
| Byte | byte |
| Short | short |
| Integer | int |
| Long | long |
| Character | char |
| Float | float |
| Double | double |
这�由编译器特别支�的包装称为装箱,所以当内置数�类型被当作对象使用的时候,编译器会把内置类型装箱为包装类。相似的,编译器也�以把一个对象拆箱为内置类型。Number 类属于 java.lang 包。
下�是一个使用 Integer 对象的实例:
Test.java 文件代ç �:
以上实例编译�行结果如下:
15
当 x 被赋为整型值时,由于x是一个对象,所以编译器è¦�对x进行装箱。然å�Žï¼Œä¸ºäº†ä½¿xèƒ½è¿›è¡ŒåŠ è¿�算,所以è¦�对x进行拆箱。
Java Math ç±»
Java çš„ Math 包å�«äº†ç”¨äºŽæ‰§è¡ŒåŸºæœ¬æ•°å¦è¿�算的属性和方法,如åˆ�ç‰æŒ‡æ•°ã€�对数ã€�å¹³æ–¹æ ¹å’Œä¸‰è§’å‡½æ•°ã€‚
Math 的方法都被定义为 static å½¢å¼�,通过 Math ç±»å�¯ä»¥åœ¨ä¸»å‡½æ•°ä¸ç›´æŽ¥è°ƒç”¨ã€‚
Test.java 文件代ç �:
以上实例编译�行结果如下:
90 度的æ£å¼¦å€¼ï¼š1.0 0度的余弦值:1.0 60度的æ£åˆ‡å€¼ï¼š1.7320508075688767 1çš„å��æ£åˆ‡å€¼ï¼š 0.7853981633974483 π/2的角度值:90.0 3.141592653589793
Number & Math 类方法
下é�¢çš„表ä¸åˆ—出的是 Number & Math 类常用的一些方法:
| �� | 方法与�述 |
|---|---|
| 1 |
xxxValue() 将 Number 对象转�为xxx数�类型的值并返回。 |
| 2 |
compareTo() 将number对象与�数比较。 |
| 3 |
equals() 判æ–number对象是å�¦ä¸Žå�‚数相ç‰ã€‚ |
| 4 |
valueOf() 返回一个 Number 对象指定的内置数�类型 |
| 5 |
toString() 以å—符串形å¼�返回值。 |
| 6 |
parseInt() å°†å—符串解æž�为int类型。 |
| 7 |
abs() 返回�数的�对值。 |
| 8 |
ceil() 返回大于ç‰äºŽ( >= )给定å�‚数的的最å°�整数,类型为å�Œç²¾åº¦æµ®ç‚¹åž‹ã€‚ |
| 9 |
floor() 返回å°�于ç‰äºŽï¼ˆ<=)给定å�‚数的最大整数 。 |
| 10 |
rint() 返回与�数最接近的整数。返回类型为double。 |
| 11 |
round() 它表示四èˆ�五入,算法为 Math.floor(x+0.5),å�³å°†åŽŸæ�¥çš„æ•°å—åŠ ä¸Š 0.5 å�Žå†�å�‘下å�–整,所以,Math.round(11.5) 的结果为12,Math.round(-11.5) 的结果为-11。 |
| 12 |
min() 返回两个å�‚æ•°ä¸çš„æœ€å°�值。 |
| 13 |
max() 返回两个å�‚æ•°ä¸çš„æœ€å¤§å€¼ã€‚ |
| 14 |
exp() 返回自然数底数e的�数次方。 |
| 15 |
log() 返回�数的自然数底数的对数值。 |
| 16 |
pow() 返回第一个�数的第二个�数次方。 |
| 17 |
sqrt() 求å�‚æ•°çš„ç®—æœ¯å¹³æ–¹æ ¹ã€‚ |
| 18 |
sin() 求指定double类型å�‚æ•°çš„æ£å¼¦å€¼ã€‚ |
| 19 |
cos() 求指定double类型�数的余弦值。 |
| 20 |
tan() 求指定double类型å�‚æ•°çš„æ£åˆ‡å€¼ã€‚ |
| 21 |
asin() 求指定double类型å�‚æ•°çš„å��æ£å¼¦å€¼ã€‚ |
| 22 |
acos() 求指定double类型�数的�余弦值。 |
| 23 |
atan() 求指定double类型å�‚æ•°çš„å��æ£åˆ‡å€¼ã€‚ |
| 24 |
atan2() 将笛å�¡å°”å��æ ‡è½¬æ�¢ä¸ºæž�å��æ ‡ï¼Œå¹¶è¿”å›žæž�å��æ ‡çš„è§’åº¦å€¼ã€‚ |
| 25 |
toDegrees() 将�数转化为角度。 |
| 26 |
toRadians() 将角度转�为弧度。 |
| 27 |
random() 返回一个�机数。 |
Math 的 floor,round 和 ceil 方法实例比较
| �数 | Math.floor | Math.round | Math.ceil |
|---|---|---|---|
| 1.4 | 1 | 1 | 2 |
| 1.5 | 1 | 2 | 2 |
| 1.6 | 1 | 2 | 2 |
| -1.4 | -2 | -1 | -1 |
| -1.5 | -2 | -1 | -1 |
| -1.6 | -2 | -2 | -1 |
floor,round 和 ceil 实例:
以上实例执行输出结果为:
Math.floor(1.4)=1.0 Math.round(1.4)=1 Math.ceil(1.4)=2.0 Math.floor(1.5)=1.0 Math.round(1.5)=2 Math.ceil(1.5)=2.0 Math.floor(1.6)=1.0 Math.round(1.6)=2 Math.ceil(1.6)=2.0 Math.floor(-1.4)=-2.0 Math.round(-1.4)=-1 Math.ceil(-1.4)=-1.0 Math.floor(-1.5)=-2.0 Math.round(-1.5)=-1 Math.ceil(-1.5)=-1.0 Math.floor(-1.6)=-2.0 Math.round(-1.6)=-2 Math.ceil(-1.6)=-1.0
知易行难x
502***892@qq.com
/** * @author Dale * javaä¸çš„自动装箱与拆箱 * 简å�•一点说,装箱就是自动将基本数æ�®ç±»åž‹è½¬æ�¢ä¸ºåŒ…装器类型;拆箱就是自动将包装器类型转æ�¢ä¸ºåŸºæœ¬æ•°æ�®ç±»åž‹ã€‚ */ public class Number { public static void main(String[] args) { /** Integer i1 = 128; // 装箱,相当于 Integer.valueOf(128); int t = i1; //相当于 i1.intValue() 拆箱 System.out.println(t); */ /** 对于–128到127(默认是127)之间的值,被装箱å�Žï¼Œä¼šè¢«æ”¾åœ¨å†…å˜é‡Œè¿›è¡Œé‡�用 但是如果超出了这个值,系统会é‡�æ–°new 一个对象 */ Integer i1 = 200; Integer i2 = 200; /** 注æ„� == 与 equals的区别 == 它比较的是对象的地å�€ equals 比较的是对象的内容 */ if(i1==i2) { System.out.println("true"); } else { System.out.println("false"); } } }知易行难x
502***892@qq.com
estivalwind
fan***i_nj@sina.com
(1)Java 会对 -128 ~ 127 的整数进行缓å˜ï¼Œæ‰€ä»¥å½“定义两个å�˜é‡�åˆ�始化值ä½�于 -128 ~ 127 之间时,两个å�˜é‡�使用了å�Œä¸€åœ°å�€ï¼š
(2)当两个 Integer ��的数值超出 -128 ~ 127 范围时, ��使用了��地�:
estivalwind
fan***i_nj@sina.com
flaming
248***1347@qq.com
�考地�
Java ä¸ int å’Œ Integer 的区别
1. int 是基本数æ�®ç±»åž‹ï¼Œint å�˜é‡�å˜å‚¨çš„æ˜¯æ•°å€¼ã€‚Integer 是引用类型,实际是一个对象,Integer å˜å‚¨çš„æ˜¯å¼•用对象的地å�€ã€‚
2.
å› ä¸º new 生æˆ�的是两个对象,其内å˜åœ°å�€ä¸�å�Œã€‚
3.
int å’Œ Integer 所å� å†…å˜æ¯”较:
Integer 对象会å� 用更多的内å˜ã€‚Integer 是一个对象,需è¦�å˜å‚¨å¯¹è±¡çš„元数æ�®ã€‚但是 int 是一个原始类型的数æ�®ï¼Œæ‰€ä»¥å� 用的空间更少。
4. � new 生�的 Integer ��与 new Integer() 生�的��比较,结果为 false。
/** * 比较é�žnew生æˆ�çš„Integerå�˜é‡�与new生æˆ�çš„Integerå�˜é‡� */ public class Test { public static void main(String[] args) { Integer i= new Integer(200); Integer j = 200; System.out.print(i == j); //输出:false } }å› ä¸ºé�ž new 生æˆ�çš„ Integer å�˜é‡�指å�‘的是 java 常é‡�æ± ä¸çš„对象,而 new Integer() 生æˆ�çš„å�˜é‡�指å�‘å †ä¸æ–°å»ºçš„对象,两者在内å˜ä¸çš„地å�€ä¸�å�Œã€‚所以输出为 false。
5. 两个� new 生�的 Integer 对象进行比较,如果两个��的值在区间 [-128,127] 之间,比较结果为 true;�则,结果为 false。
/** * 比较两个�new生�的Integer�� */ public class Test { public static void main(String[] args) { Integer i1 = 127; Integer ji = 127; System.out.println(i1 == ji);//输出:true Integer i2 = 128; Integer j2 = 128; System.out.println(i2 == j2);//输出:false } }java 在编译 Integer i1 = 127 时,会翻译� Integer i1 = Integer.valueOf(127)。
6. Integer å�˜é‡�(æ— è®ºæ˜¯å�¦æ˜¯ new 生æˆ�çš„)与 int å�˜é‡�比较,å�ªè¦�两个å�˜é‡�的值是相ç‰çš„,结果都为 true。
/** * 比较Integerå�˜é‡�与intå�˜é‡� */ public class Test { public static void main(String[] args) { Integer i1 = 200; Integer i2 = new Integer(200); int j = 200; System.out.println(i1 == j);//输出:true System.out.println(i2 == j);//输出:true } }包装类 Integer å�˜é‡�在与基本数æ�®ç±»åž‹ int å�˜é‡�比较时,Integer 会自动拆包装为 int,然å�Žè¿›è¡Œæ¯”较,实际上就是两个 int å�˜é‡�进行比较,值相ç‰ï¼Œæ‰€ä»¥ä¸º true。
flaming
248***1347@qq.com
�考地�
yuki
897***223@qq.com
Math.floor 是�下�整。
Math.ceil 是�上�整。
Math.round 是四�五入�整 但是需�注�的是:
yuki
897***223@qq.com
JavaNewer
529***970@qq.com
装箱和拆箱的概念有点特别。
byteã€�intã€�longã€�double ç‰ä¸º java 的基础数æ�®ç±»åž‹ã€‚
所有的包装类(Integerã€�Longã€�Byteã€�Doubleã€�Floatã€�Short)都是抽象类 Number çš„å�类。
包装类和基础数�类型用于��场景下,也�以混用。
JavaNewer
529***970@qq.com
inytialf
iny***lf@163.com
说到对floor()和ceil()的概念�解:
1. floor直接�其�义,也就是“地��,地�在脚下,��下�整。
2. ceil是ceiling的缩写,也就是“天花��,天花�在头顶上,��上�整。
这里需�注�,floor()和ceil()的返回值都是double类型的数值。
round()的四�五入也�以引入y轴�确定:
ä¸�ç®¡æ£æ•°è¿˜æ˜¯è´Ÿæ•°ï¼Œå››èˆ�五入法è¦�求,凡是.5çš„å°�数,都è¦�å�‘上å�–整。
å› æ¤ï¼Œè´Ÿæ•°.5å°�数的四èˆ�五入,å�ªéœ€ç›´æŽ¥å�–ç»�对值,å†�åŠ ä¸Šè´Ÿå�·ï¼Œå°±å®Œæˆ�了。
inytialf
iny***lf@163.com