本节重点思维导图

需要使用数字的时候,我们通常使用内置数据类型,如:byte、int、long、double

  1. int a = 5000;
  2. float b = 13.65f;
  3. byte c = 0x4a;

需要使用对象,而不是内置数据类型的情形。Java 为每一个内置数据类型提供了对应的包装类

所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类 Number 的子类

 当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类。相似的,编译器也可以把一个对象拆箱为内置类型

  1. public class Test{
  2.  
  3. public static void main(String args[]){
  4. Integer x = 5;
  5. x = x + 10;
  6. System.out.println(x);
  7. }
  8. }
  9. /*当 x 被赋为整型值时,由于x是一个对象,所以编译器要对x进行装箱。然后,为了使x能进行加运算,所以要对x进行拆箱。 */

 Java Math类

包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。

Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用

  1. System.out.println("90 度的正弦值:" + Math.sin(Math.PI/2));
  2. System.out.println("0度的余弦值:" + Math.cos(0));
  3. System.out.println("60度的正切值:" + Math.tan(Math.PI/3));
  4. System.out.println("1的反正切值: " + Math.atan(1));
  5. System.out.println("π/2的角度值:" + Math.toDegrees(Math.PI/2));
  6. System.out.println(Math.PI);

 Math方法

  1. /**
  2. * @author Dale
  3. * java中的自动装箱与拆箱
  4. * 简单一点说,装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。
  5. */
  6. public class Number {
  7. public static void main(String[] args) {
  8. /**
  9. Integer i1 = 128; // 装箱,相当于 Integer.valueOf(128);
  10. int t = i1; //相当于 i1.intValue() 拆箱
  11. System.out.println(t);
  12. */
  13.  
  14. /**
  15. 对于–128到127(默认是127)之间的值,被装箱后,会被放在内存里进行重用
  16. 但是如果超出了这个值,系统会重新new 一个对象
  17. */
  18. Integer i1 = 200;
  19. Integer i2 = 200;
  20.  
  21. /**
  22. 注意 == 与 equals的区别
  23. == 它比较的是对象的地址
  24. equals 比较的是对象的内容
  25. */
  26. if(i1==i2) {
  27. System.out.println("true");
  28. } else {
  29. System.out.println("false");
  30. }
  31. }
  32. }

 int 和 Integer 的区别

1. int 是基本数据类型,int 变量存储的是数值。Integer 是引用类型,实际是一个对象,Integer 存储的是引用对象的地址。

2.

  1. Integer i = new Integer(100);
  2. Integer j = new Integer(100);
  3. System.out.print(i == j); //false

因为 new 生成的是两个对象,其内存地址不同。

3.

int 和 Integer 所占内存比较:

Integer 对象会占用更多的内存。Integer 是一个对象,需要存储对象的元数据。但是 int 是一个原始类型的数据,所以占用的空间更少。

4. 非 new 生成的 Integer 变量与 new Integer() 生成的变量比较,结果为 false。

  1. /**
  2. * 比较非new生成的Integer变量与new生成的Integer变量
  3. */
  4. public class Test {
  5. public static void main(String[] args) {
  6. Integer i= new Integer(200);
  7. Integer j = 200;
  8. System.out.print(i == j);
  9. //输出:false
  10. }
  11. }

因为非 new 生成的 Integer 变量指向的是 java 常量池中的对象,而 new Integer() 生成的变量指向堆中新建的对象,两者在内存中的地址不同。所以输出为 false。

5. 两个非 new 生成的 Integer 对象进行比较,如果两个变量的值在区间 [-128,127] 之间,比较结果为 true;否则,结果为 false。

  1. /**
  2. * 比较两个非new生成的Integer变量
  3. */
  4. public class Test {
  5. public static void main(String[] args) {
  6. Integer i1 = 127;
  7. Integer ji = 127;
  8. System.out.println(i1 == ji);//输出:true
  9. Integer i2 = 128;
  10. Integer j2 = 128;
  11. System.out.println(i2 == j2);//输出:false
  12. }
  13. }

java 在编译 Integer i1 = 127 时,会翻译成 Integer i1 = Integer.valueOf(127)

6. Integer 变量(无论是否是 new 生成的)与 int 变量比较,只要两个变量的值是相等的,结果都为 true。

  1. /**
  2. * 比较Integer变量与int变量
  3. */
  4. public class Test {
  5. public static void main(String[] args) {
  6. Integer i1 = 200;
  7. Integer i2 = new Integer(200);
  8. int j = 200;
  9. System.out.println(i1 == j);//输出:true
  10. System.out.println(i2 == j);//输出:true
  11. }
  12. }

包装类 Integer 变量在与基本数据类型 int 变量比较时,Integer 会自动拆包装为 int,然后进行比较,实际上就是两个 int 变量进行比较,值相等,所以为 true。

分装类深入

  1. public static void main(String[] args) {
  2. int a = 88;
  3. System.out.println(a + 3);
  4. System.out.println(a - 3);
  5. System.out.println(a * 3);
  6. System.out.println(a / 3);
  7. System.out.println(a % 3);
  8. System.out.println(a++);
  9. System.out.println(--a);
  10. System.out.println(a >> 3);
  11.  
  12. Integer b = 4;
  13. System.out.println(b.MAX_VALUE);
  14. System.out.println(Integer.MIN_VALUE);
  15.  
  16. int max = Integer.min(23, -89);
  17. System.out.println(max);
  18. String binaryString = Integer.toBinaryString(24);
  19. System.out.println(binaryString);
  20. System.out.println(Integer.toHexString(123345));
  21.  
  22. char aa = Character.toUpperCase('a');
  23. System.out.println(aa);
  24. }

代码块

所有的Java语句都必须写到代码块中,声明语句除外。

静态代码块

  1. static{
  2. }

构造代码块

  1. {
  2. }

结论:

Ø 只要程序启动,就会运行静态代码块中的代码

Ø 静态代码块只运行一次

Ø 当定义类的对象时,系统会依次调用静态代码块---构造代码块---构造方法

其中,静态代码块只调用一次,构造代码块和构造方法是每new一次就调用一次

  1. public class Demo {
  2.  
  3. public Demo() {
  4. System.out.println("第三个调用,new一次,调用一次");
  5. }
  6.  
  7. {
  8. System.out.println("第二个调用,new一次,调用一次");
  9. }
  10. static {
  11. System.out.println("第一个调用,且只调用一次");
  12. }
  13.  
  14. public static void main(String[] args) {
  15. new Demo();
  16. new Demo();
  17. new Demo();
  18. }
  19. }

Java ——Number & Math 类 装箱 拆箱 代码块的更多相关文章

  1. Java-Runoob:Java Number & Math 类

    ylbtech-Java-Runoob:Java Number & Math 类 1.返回顶部 1. Java Number & Math 类 一般地,当需要使用数字的时候,我们通常使 ...

  2. Java基础(四):Java Number & Math 类、Character 类、String 类、StringBuffer & StringBuilder 类

    一.Java Number & Math 类: 1.Number类: 一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double 等.然而,在实际开发 ...

  3. Java中的自动装箱拆箱

    Java中的自动装箱拆箱 一.自动装箱与自动拆箱 自动装箱就是将基本数据类型转换为包装类类型,自动拆箱就是将包装类类型转换为基本数据类型. 1 // 自动装箱 2 Integer total = 90 ...

  4. Java Number&Math类

    Java Number类 一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double等. 实例 int i = 5000; float gpa = 13.65 ...

  5. Java Number & Math类

    java Number类 Java的内置数据类型有byte.int.long.double等. Java 语言为每一个内置数据类型提供了对应的包装类. int对应的包装类为Integer long对应 ...

  6. Java Number & Math 类

    // java.lang.Math 常用 // xxxValue() 方法用于将 Number 对象转换为 xxx 数据类型的值并返回. System.out.println(((Integer) 5 ...

  7. Java 基础巩固:装箱拆箱 你真的熟悉吗

    先考两道题: Integer a1 = 300; Integer a2 =300; System.out.print(a1 == a2); Integer b1 = 1; Integer b2 = 1 ...

  8. Long.ValueOf("String") Long.parseLong("String") 区别 看JAVA包装类的封箱与拆箱

    IP地址类型转换原理: 将一个点分十进制IP地址字符串转换成32位数字表示的IP地址(网络字节顺序). 将一个32位数字表示的IP地址转换成点分十进制IP地址字符串. 1.Long.ParseLong ...

  9. C#装箱拆箱

    .       装箱和拆箱是一个抽象的概念 2.       装箱是将值类型转换为引用类型 :拆箱是将引用类型转换为值类型        利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类 ...

随机推荐

  1. Linux Qt cannot find -lGL错误完美解决方案(亲测有效)

    http://c.biancheng.net/view/3901.html 对于很多 Linux 发行版本,Qt 安装完成后如果直接编译或者运行项目,会出现“cannot find -lGL”错误,如 ...

  2. STM32F407 正点原子按键输入实验

    库函数版本: 库函数 源文件 头文件 GPIO_Init(GPIOE, &GPIOE_initstructure) stm32f4xx_gpio.c stm32f4xx_gpio.h RCC_ ...

  3. CentOS7 安装 Python3.6.5

    在centos7下安装python3.6.5 CentOS7编译安装python3.6.8报错zipimport.ZipImportError: can't decompress data; zlib ...

  4. PAT Basic 1024 科学计数法 (20 分) Advanced 1073 Scientific Notation (20 分)

    科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指 ...

  5. flutter 基础组件

    TextWidget class TextWidget extends StatelessWidget { final TextStyle _textStyle = TextStyle( fontSi ...

  6. GUI学习之三十—QCalendarWidget学习总结

    今天学习的是最后一个展示控件——QCalendarWidget 一.描述 QCalendarWidget提供了一个基于每月的日历控件,允许用户选择一个日期,还可以看一下里面的图示: QCalendar ...

  7. 下载放在resource下面的excel文件

    1.将excel文件放项目resources目录下 2.打包的时候排除指定后缀文件,否则打包时会出现文件损坏的情况 <configuration> <encoding>UTF- ...

  8. springboot easyexcel

    pom..xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel&l ...

  9. Mac升级系统后 Pod Install报错-不能用 解决办法

    brew reinstall cocoapods brew install ruby brew link --overwrite cocoapods 最近将Mac OS升级到10.15.1 ,再回来初 ...

  10. codeforces 868C - Qualification Rounds(构造)

    原题链接:http://codeforces.com/problemset/problem/868/C 题意:有k个队伍参加比赛,比赛有n个预选的题目,有些队伍对已经事先知道了一些题目.问能不能选出若 ...