基本的4类八种值类型数据各自对应着一个包装类,不知道大家认为两者有什么区别?
两者没有什么区别,只是java为了方便转换而定义的包装类。
很多人会这么认为吧
真的是这样吗?
System.out.println(Integer.class==int.class);
不知道大家对于这段代码怎么理解的,结果是什么?
曾经我问过一个经理int和Integer有什么区别,他告诉我没什么区别,两者的字节码文件都是一样的,后来我试了一下,却发现结果是false
System.out.println(Integer.class);//输出结果class java.lang.Integer
System.out.println(int.class);//输出结果为int
你没看错,int.class结果就是int
我们知道,在java之中 System.out.println方法输出的是对象的tostring方法类名.class返回的其实就是对象名.getClass()不相信的话大家可以自己试试
String s =""; System.out.println(String.class==s.getClass());//结果为true
我们看看Class的源码
public String toString() { return (isInterface() ? "interface " : (isPrimitive() ? "" : "class ")) + getName(); }
从源码我们可以看出,如果是类,那么返回class+完整路径名字,如果是接口返回interface +完整路径名
但是int却只有一个int,既没有class,也没有interface,其他的基本类型也是这样,似乎不符合java语法。
事实上也的确是这样,基本数据类型都来自于c语言的函数库,有兴趣的可以自己去看看
到这里肯定有人会疑惑
既然字节码文件不一样,那么说明两者是不同的数据类型,结构也不相同,那么两者到底是怎么转化的呢?
当然,如果还有说两者是无条件转化的,那么你们可以试试如下代码
public class A { static Integer a; public static void main(String[] args) { int b = a; System.out.println(b); } }
大家猜猜结果是什么?
结果抛出了java.lang.NullPointerException
为什么呢?
因为转化过程其实是这样的
public class A { static Integer a; public static void main(String[] args) { int b = a.intValue(); System.out.println(b); } }
jvm看到基本数据类型和包装类型的转化自动调用了对应的方法,
基本数据类型转为包装数据类型(以int为例)是new Integer(int)
而包装类转基本类型则是对象.intValue
不过有一点我搞不明白,知道的请说下
private final int value;
这个到底是怎么定义出来的
this.value = value;
这个又是怎么赋值的
从上面截图的源码我们可以看到,value是被final修饰的,在java之中,被final修饰的变量是不能更改其引用的,而且有final修饰必须对其初始化
我们这样定义,他就会提示终态字段未初始化,但是他是怎么定义的,这点我搞不明白
相关推荐
Java 基本数据类型与包装类之间的转换的思维脑图
对Java对象的强制类型转换称为造型==操作符与equals方法==:equals():String对象的创建代码练习题包装类(Wrapper)基本数据类型包装成包装类的实例–装箱获得包装类对象中包装的基本类型变量 —拆箱字符串转换为...
自动装箱是指将原始类型转换为对应的包装类的过程,而自动拆箱是指将包装类转换为对应的原始类型的过程。 在 Java 中,还有许多其他的知识点与原始类型和包装类相关。例如,Integer 类提供了许多有用的方法,可以对...
Java 八大基本类型和包装类 Java 中有八大基本类型,分别是整型、浮点型、布尔型和字符型,每种类型都有其特点和应用场景。 整型包括 byte、short、int 和 long 四种,分别表示 8 位、16 位、32 位和 64 位的整数...
* 在包装类、基本类型、String 类型之间转换。 * 进制间的转换,例如将 int 类型的值转换成十六进制、八进制、 二进制字符串。 BigInteger 是一个大整数类型,可以表示非常大的整数。它具有一个 final 的 int 数组 ...
从包装类向对应的基本类型转换称为拆箱,例如把 Integer 类的对象重新简化为 int。 Java 中的八种基本数据类型和对应的包装类分别是: * byte 和 Byte * short 和 Short * int 和 Integer * long 和 Long * char ...
包装类是Java提供的一种特殊类,它的主要作用是将基本数据类型转换为对象,从而可以调用对象的方法。 包装类的使用场景 当我们需要使用基本数据类型进行面向对象的操作时,就可以使用包装类。例如,我们需要对一个...
计算机后端-Java-Java核心基础-第14章 面向对象06 22. 基本数据类型转换为包装类.avi
Java 包装类型的自动装箱拆箱机制是指在(assign)操作时,Java 会自动地将基本类型转换为包装类型,或者将包装类型转换为基本类型。例如,Integer i = 100;这里的 i 就是自动装箱的结果。 5. Java 语句 Integer i=1;...
自动装箱与拆箱:自动装箱(Autoboxing)指的是自动地将基本数据类型转换为对应的包装类对象;自动拆箱(Unboxing)则是将包装类对象自动转换为基本数据类型。 常用方法:演示如何使用包装类中的这些常见方法。 null...
计算机后端-Java-Java核心基础-第14章 面向对象06 23. 包装类转换为基本数据类型.avi
计算机后端-Java-Java核心基础-第21章 常用类 14. 回顾String与基本数据类型包装类的转
计算机后端-Java-Java核心基础-第14章 面向对象06 25. 基本数据类型包装类与String的相互
是用于基本数据类型和字符串类型之间做转换 基本数据类型转成字符串。 基本数据类型+"" 基本数据类型.toString(基本数据类型值); 如: Integer.toString(34);//将34整数变成"34"; 字符串转成基
8种基本类型所对应的对象类型,可以直接将基本类型的变量表示为一个对象,在执行变量类型的相互转换时,我们会大量使用这些包装类。 包装类有什么用? 1、支持null字面值,可以表示空值。 2、支持缓存,提高复用效率...
} } 运⾏结果: 基本类型:byte ⼆进制位数:8 包装类:java.lang.Byte 最⼩值:Byte.MIN_VALUE = -128 最⼤值: Byte.MAX_VALUE = 127 基本类型:char ⼆进制位数:16 包装类:java.lang.Character 最⼩值:...
一、什么是Java Number类? Java Number类是Java中的一个抽象类,它是所有数值类型的...包装类 基本数据类型 Boolean boolean Byte byte Short short Integer int Long long Character char Float float Double double
主要介绍了Java基本类型包装类概述与Integer类、Character类用法,结合实例形式分析了java基本数据类型与字符串转换相关操作技巧,需要的朋友可以参考下
1.实现int和integer之间的转换 2.Integer的常用方法 3.自动装箱和自动拆箱 4.数值的比较
这些包装类可以将基本数据类型封装成对象,使得基本数据类型也可以作为对象使用。 6.2.3 Integer 包装类 Integer 包装类是 Java 中的一种包装类,它可以将整数类型封装成对象。Integer 包装类提供了多种方法,包括...