`
神绮_H_亚里亚
  • 浏览: 10433 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

包装类和基本类型的转换

阅读更多

基本的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 基本数据类型与包装类之间的转换的思维脑图

    java原始数据类型的包装类

    - `valueOf()`是每个包装类的静态方法,用于将原始类型转换为对应的包装类对象,如`Integer i = Integer.valueOf(10);` 7. **Integer缓存**: - Integer类有一个特殊的优化,它会缓存-128到127之间的所有整数对象...

    Java笔记(9)类型转换与包装类

    对Java对象的强制类型转换称为造型==操作符与equals方法==:equals():String对象的创建代码练习题包装类(Wrapper)基本数据类型包装成包装类的实例–装箱获得包装类对象中包装的基本类型变量 —拆箱字符串转换为...

    原始类型 包装类 原始类型所占的字节数

    自动装箱是指将原始类型转换为对应的包装类的过程,而自动拆箱是指将包装类转换为对应的原始类型的过程。 在 Java 中,还有许多其他的知识点与原始类型和包装类相关。例如,Integer 类提供了许多有用的方法,可以对...

    Java基本类型转换.doc

    本文主要探讨Java中的基本类型转换,包括简单数据类型之间的转换、字符串与其他数据类型的转换以及一些实用的数据类型转换。 1. 简单数据类型之间的转换 Java中的简单数据类型包括布尔型(boolean)、字符型(char...

    Java八大基本类型和包装类.docx

    Java 八大基本类型和包装类 Java 中有八大基本类型,分别是整型、浮点型、布尔型和字符型,每种类型都有其特点和应用场景。 整型包括 byte、short、int 和 long 四种,分别表示 8 位、16 位、32 位和 64 位的整数...

    基本数据类型包装类.pdf

    * 在包装类、基本类型、String 类型之间转换。 * 进制间的转换,例如将 int 类型的值转换成十六进制、八进制、 二进制字符串。 BigInteger 是一个大整数类型,可以表示非常大的整数。它具有一个 final 的 int 数组 ...

    JAVA类型转换[文].pdf

    - **其他实用数据类型转换**:涉及包装类(如Integer、Double)与基本类型的转换,以及Date和String的互转。 2. **简单数据类型之间的转换** - **自动类型转换**:从低级别类型转换到高级别类型,如byte到int,...

    Java包装类、拆箱和装箱详解.docx

    从包装类向对应的基本类型转换称为拆箱,例如把 Integer 类的对象重新简化为 int。 Java 中的八种基本数据类型和对应的包装类分别是: * byte 和 Byte * short 和 Short * int 和 Integer * long 和 Long * char ...

    深入分析java中的类型转换

    在Java中,类型转换主要分为两大类:**隐式自动类型转换**和**强制手动类型转换**。 #### 隐式自动类型转换 隐式自动类型转换指的是Java编译器自动完成的类型转换过程。这种类型的转换通常发生在较小的数据类型向较...

    Java包装类

    - 使用包装类的`valueOf()`方法,该方法会返回一个包装类对象,再通过自动拆箱转换为基本类型。 示例: ```java String str = "8"; int d = Integer.parseInt(str); ``` 以上就是关于Java中包装类的基本介绍及其...

    JAVA类型转换.pdf

    - 包装类提供了多种静态方法来进行类型转换,如Integer.parseInt(),Double.parseDouble()等。 8. 基本数据类型到它们的包装类的自动装箱和拆箱: - 自动装箱是指基本类型自动转换成对应的包装类。 - 自动拆箱是...

    Java包装类详解.pptx.pptx

    当基本类型和包装类交互时,编译器会自动进行装箱(将基本类型转换为包装类对象)和拆箱(将包装类对象转换为基本类型)操作。这一特性显著提高了代码的简洁性和运行效率。 总的来说,Java的包装类在面向对象编程中...

    java 数据类型转换

    - 反之,当包装类对象被用于基本类型的地方时,会发生拆箱(unboxing)转换。 ### 强制类型转换(显式转换) 强制类型转换需要程序员明确地进行,通常用在将大范围的数据类型转换为小范围的数据类型时。转换语法...

    第02章 Java编程基础 04 基本数据类型转换

    装箱是将基本数据类型转换为对应的包装类对象,如Integer、Double等;拆箱则是包装类对象转换回基本数据类型。这是Java SE 5.0引入的特性,以方便在基本类型与对象之间进行操作。 例如,你可以将一个int变量转换为...

    Java中自动类型转换共3页.pdf.zip

    2. **包装类与基本类型之间的转换**:Java中的Integer、Double等包装类和对应的原始基本类型之间也可以进行自动转换。如果一个包装类对象被赋值给一个基本类型的变量,那么会调用包装类的`intValue()`、`doubleValue...

    Java 包装类

    这些包装类不仅提供了将基本类型转换为对象的方法,还提供了一系列实用的方法,比如比较、格式化、解析等。 **自动装箱与拆箱** 在Java 5及更高版本中,引入了自动装箱和拆箱机制。这意味着可以直接在基本类型和其...

    编程语言java类型转换.pdf

    自动装箱和拆箱是Java中自动将基本类型转换为对应的包装类实例,或者将包装类实例转换回基本类型的过程。例如: ```java Integer i = 100; // 自动装箱 int j = i; // 自动拆箱 ``` 总结来说,Java中的类型转换是一...

Global site tag (gtag.js) - Google Analytics