java分装_Java ——Number & Math 类 装箱 拆箱 代码块

本节重点思维导图

05344e5651e785bd740164fc6f6e93e4.png

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

int a = 5000;float b = 13.65f;byte c = 0x4a;

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

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

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

5419b572b02c72e5fc22468bc6c190d5.png

public classTest{public static voidmain(String args[]){

Integer x= 5;

x= x + 10;

System.out.println(x);

}

}/*当 x 被赋为整型值时,由于x是一个对象,所以编译器要对x进行装箱。然后,为了使x能进行加运算,所以要对x进行拆箱。*/

Java Math类

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

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

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);

Math方法

119b10d4f1e0b2adef05b8d41c079ff4.png

8310e0d4e8632b378147bdc9343ff764.png

11335578db26f81341c470ae0eed3cd1.png

58681b71e139982a6e010f92f82ec3c0.png

/***@authorDale

* java中的自动装箱与拆箱

* 简单一点说,装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。*/

public classNumber {public static voidmain(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");

}

}

}

8b8073ec51b21aab9dc8c8f0503d72d6.png

int 和 Integer 的区别

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

2.

Integer i = new Integer(100);

Integer j= new Integer(100);

System.out.print(i== j); //false

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

3.

int 和 Integer 所占内存比较:

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

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

/*** 比较非new生成的Integer变量与new生成的Integer变量*/

public classTest {public static voidmain(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 classTest {public static voidmain(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 classTest {public static voidmain(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。

分装类深入

public static voidmain(String[] args) {int a = 88;

System.out.println(a+ 3);

System.out.println(a- 3);

System.out.println(a* 3);

System.out.println(a/ 3);

System.out.println(a% 3);

System.out.println(a++);

System.out.println(--a);

System.out.println(a>> 3);

Integer b= 4;

System.out.println(b.MAX_VALUE);

System.out.println(Integer.MIN_VALUE);int max = Integer.min(23, -89);

System.out.println(max);

String binaryString= Integer.toBinaryString(24);

System.out.println(binaryString);

System.out.println(Integer.toHexString(123345));char aa = Character.toUpperCase('a');

System.out.println(aa);

}

代码块

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

静态代码块

static{

}

构造代码块

{

}

结论:

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

Ø 静态代码块只运行一次

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

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

public classDemo {publicDemo() {

System.out.println("第三个调用,new一次,调用一次");

}

{

System.out.println("第二个调用,new一次,调用一次");

}static{

System.out.println("第一个调用,且只调用一次");

}public static voidmain(String[] args) {newDemo();newDemo();newDemo();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值