首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么Java自动装箱不会扩展到自动装箱类型方法的方法调用?

在Java中,自动装箱是指将基本数据类型自动转换为相应的包装类型。例如,将int类型转换为Integer类型。自动装箱的主要目的是为了简化代码,使得基本数据类型和包装类型之间的转换更加方便。

然而,自动装箱不会扩展到自动装箱类型方法的方法调用。这是因为Java编译器在编译时会进行类型检查,以确保代码的正确性。在自动装箱类型方法的方法调用中,编译器无法确定调用哪个方法,因为自动装箱类型方法可能有多个重载版本,每个版本的参数类型都不同。

例如,假设我们有一个自动装箱类型方法,如下所示:

代码语言:java
复制
public class BoxingExample {
    public void foo(Integer i) {
        System.out.println("Integer version called");
    }

    public void foo(int i) {
        System.out.println("int version called");
    }
}

在这个例子中,我们有两个重载版本的foo方法,一个接受Integer类型的参数,另一个接受int类型的参数。如果我们尝试调用这个方法,如下所示:

代码语言:java
复制
BoxingExample be = new BoxingExample();
be.foo(42);

编译器会报错,因为它无法确定应该调用哪个版本的foo方法。因此,为了避免这种情况,Java编译器不会自动将基本数据类型转换为相应的包装类型,除非我们明确指定要调用的方法版本。

总之,自动装箱不会扩展到自动装箱类型方法的方法调用,是因为Java编译器需要确定调用哪个方法,而自动装箱类型方法可能有多个重载版本,每个版本的参数类型都不同。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java自动装箱装箱缓存

参考链接: Java中autoboxing自动装箱整数对象比较 前言  Java 是一种面向对象编程语言,Java类把方法与数据类型连接在一起,构成了自包含式处理单元。...但在 Java 中不能定义基本类型对象,为了能将基本类型视为对象处理,并能连接相关方法Java 为每个基本数据类型都提供了包装类,如 int 型数值包装类 Integer,boolean 型数值包装类...什么是自动装箱  Java中不能定义基本数据类型对象,因此我们可以使用包装类,每种基本数据类型都有自己对应包装类。...基本数据类型转换为包装类过程称作自动装箱包装类转换为基本数据类型过程称作自动拆箱  自动装箱实现原理  举一个栗子:  public class AutoBoxing {     public...for (int i = 1; i < 10; i ++){         list.add(i);//list.add(Integer.valueOf(i));自动装箱     } 方法调用、参数返回时

56530

Java 自动装箱对性能影响大还是小?如何解决 Java 自动装箱性能问题?

= 99; char c = ‘a’; boolean b = true; 原始类型代表了用代码表示数据最简单,最直接方法。...原语类型自动装箱功能。...我一直以为,当Java引入原始类型装箱装箱时,也实现了JVM级别的优化,以解决与Java自动装箱相关任何性能问题。...自动装箱导致性能问题。 ? Java 原语类型装箱和拆箱会导致 JVM 性能问题。 此外,当您检查 Java Mission Control 垃圾收集指标时,您会发现垃圾收集不在图表中: ?...当使用自动装箱功能时,Java Mission Control 显示了猖 ramp 垃圾回收例程会影响性能。 修复Java自动装箱 您如何解决 Java 自动装箱性能问题?

1.5K20
  • 有关JAVA自动装箱-拆箱分析

    文章目录 1.JAVA数据类型 2.定义 3.发生时机 4.包装类缓存 在java常量与常量池 中已经介绍过一些java自动装箱与拆箱例子。现在单独对自动装箱/拆箱进行总结。...4字节 Float double 8字节 Double char 2字节 Character boolean 不同虚拟机取值不同 Boolean 2.定义 自动装箱:把基本类型用其包装类替代,使其具有对象特性...可以调用toString()、hashCode()、getClass()、equals()等方法。...如: Integer a = 4; 其实编译器调用是static Integer valueOf(int i)这个方法,valueOf(int i)返回一个表示指定int值Integer对象,反编译后如下...反编译后如下: int a = new Integer(4).intValue(); 3.发生时机 当出现赋值运算、算数表达式、方法调用等情况时,会触发自动装箱/拆箱操作。

    88631

    java自动装箱和拆箱

    一、什么是自动装箱和拆箱: 我们知道java为8种基本类型分别提供了对应包装类型,在Java SE5之前,如果要生成一个数值为10Integer对象,必须这样进行: Integer i=new Integer...(10); 而在从Java SE5开始就提供了自动装箱特性,如果要生成一个数值为10Integer对象,只需要这样就可以了: Integer i=10; 这个过程会自动根据数值类型创建Integer...对象,则就是自动装箱,同理 Integer i=10; int j=i; 上面的代码则是自动拆箱,将Integer对象自动拆箱为int 简单来说装箱就是自动将基本数据类型转换为包装器类型,拆箱就是自动将包装器类型转化为基本类型...由反编译结果可知,装箱时候调用是IntegervalueOf方法,拆箱时调用是IntegerintValue方法 其他包装器类也类似,这里就不一一举例了 总结:java装箱过程是调用包装类...valueOf方法实现,而拆箱过程则是调用包装类xxxValue方法实现(xxx代表对应基本类型) 三、面试中相关问题: 下面的这段代码将输出什么: public class Main {

    59240

    Java自动装箱与拆箱

    自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应对象。自动装箱与拆箱机制可以让我们在Java变量赋值或者是方法调用等情况下使用原始类型或者对象类型更加简单直接。...为了让代码简练,Java 1.5引入了具有在原始类型和对象类型自动转换装箱和拆箱机制。...自动装箱拆箱要点 自动装箱时编译器调用valueOf将原始类型值转换成对象,同时自动拆箱时,编译器通过调用类似intValue(),doubleValue()这类方法将对象转换成原始类型值。...何时发生自动装箱和拆箱 自动装箱和拆箱在Java中很常见,比如我们有一个方法,接受一个对象类型参数,如果我们传递一个原始类型值,那么Java自动讲这个原始类型值转换成与之对应对象。...在1.5之前,value(int)和value(Integer)是完全不相同方法,开发者不会因为传入是int还是Integer调用哪个方法困惑,但是由于自动装箱和拆箱引入,处理重载方法时稍微有点复杂

    59220

    Java自动装箱与拆箱

    自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应对象。自动装箱与拆箱机制可以让我们在Java变量赋值或者是方法调用等情况下使用原始类型或者对象类型更加简单直接。...为了让代码简练,Java 1.5引入了具有在原始类型和对象类型自动转换装箱和拆箱机制。...自动装箱拆箱要点 自动装箱时编译器调用valueOf将原始类型值转换成对象,同时自动拆箱时,编译器通过调用类似intValue(),doubleValue()这类方法将对象转换成原始类型值。...何时发生自动装箱和拆箱 自动装箱和拆箱在Java中很常见,比如我们有一个方法,接受一个对象类型参数,如果我们传递一个原始类型值,那么Java自动讲这个原始类型值转换成与之对应对象。...在1.5之前,value(int)和value(Integer)是完全不相同方法,开发者不会因为传入是int还是Integer调用哪个方法困惑,但是由于自动装箱和拆箱引入,处理重载方法时稍微有点复杂

    72920

    如何理解Java自动拆箱和自动装箱

    如何理解Java自动拆箱和自动装箱自动拆箱?自动装箱?什么鬼,听都没听过啊,这...这..知识盲区... 回到家后小伟赶紧查资料,我透,这不就是问基本类型跟封装类型吗,面试官整啥名词呢......我们知道,类优点在于它可以定义成员变量、成员方法,提供丰富便利功能,因此Java在JDK1.0时候就设计了基本数据类型包装类,而在JDK1.5中引入了新特性:自动装箱和拆箱。...intValue() 方法: private final int value; public int intValue() { return value; } 这个方法就比较简单了,调用时直接返回了基本数据类型...4、 上才艺 才艺一:如何理解Java自动拆箱和自动装箱? 答:自动装箱就是将基本数据类型自动转换为封装类型自动拆箱是将封装类型自动转换为基本数据类型。...才艺二:能说一下是通过哪些方法实现自动拆箱、装箱吗? 答:以Integer为例,使用Integer.valueOf()方法实现装箱,使用Integer.intValue()方法实现拆箱。

    1.4K20

    Java 自动装箱与拆箱实现原理

    什么是自动装箱和拆箱 自动装箱就是Java自动将原始类型值转换成对应对象,比如将int变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。...因为这里装箱和拆箱是自动进行非人为转换,所以就称作为自动装箱和拆箱。...自动装箱和拆箱原理 自动装箱时编译器调用valueOf将原始类型值转换成对象,同时自动拆箱时,编译器通过调用类似intValue(),doubleValue()这类方法将对象转换成原始类型值。...,相当于调用了Integer.valueOf(40);方法。     ...cache属于常量,存放在java方法区中。     如果你不了解方法区请点击这里查看JVM内存模型 接着看下面是java8种基本类型自动装箱代码实现。

    1.7K170

    【JavaSE专栏6】Java 基本类型转换、包装类、自动装箱自动拆箱

    通过以上一个简单例子,同学们只需简单了解下为什么要进行数据类型转换即可。 即只要参与运算基本数据类型不一致时,就会发生数据类型转换。...---- 二、自动装箱自动拆箱 在学习自动装箱自动拆箱之前,首先了解什么是包装类。 2.1 包装类是什么? 在 jdk1.4 中,新增了 8 个基本数据类型对应包装类,如下表所示。...---- 2.3 自动装箱 自动装箱是什么?基本类型自动转换为包装类型就是自动装箱。...自动装箱,就是将一个基本类型直接赋值给包装类型过程。 如果没有自动装箱,以上代码无法通过 JVM 编译。 ---- 2.4 自动拆箱 自动拆箱是什么?包装类型自动转换为基本类型就是自动拆箱。...---- 三、课时小结 在本节课时中,讲解了低转高、高转低 Java 基本类型转换,接着学习了包装类概念,再引申出自动装箱自动拆箱概念,最后分别进行了性能测试。

    18320

    通过源码了解Java自动装箱拆箱

    什么叫装箱 & 拆箱? 将int基本类型转换为Integer包装类型过程叫做装箱,反之叫拆箱。...由此我们引出了Java装箱这个操作。我们带着疑问去进行分析。...-XX:AutoBoxCacheMax=(size) 自动装箱带来性能问题 那么看到现在你应该明白上面代码出现不同结果原因了,那么你有没有想过,比如我们业务中一个for循环中,出现了统计数据类似这样操作...,如果存在自动装箱,那么会出现什么问题?...小总结 通过上面的源码阅读和测试分析,我们可以得出结论,我们平时在进行计算统计,或者方法入参时候,应该尽量避免这种类型转换问题。来提升我们整个代码执行效率。

    38710

    详解 Java自动装箱与拆箱

    原文链接:https://www.cnblogs.com/wang-yaz/p/8516151.html 什么是自动装箱拆箱 很简单,下面两句代码就可以看到装箱和拆箱过程 //自动装箱 Integer...total = 99; //自动拆箱 int totalprim = total; 简单一点说,装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。...下面我们来看看需要装箱拆箱类型有哪些: ? ? 这个过程是自动执行,那么我们需要看看它执行过程: 反编译 class 文件之后得到如下内容: 1 javap -c StringTest ?...3、equals(Object o) 因为原equals方法参数类型是封装类型,所传入参数类型(a)是原始数据类型,所以会自动对其装箱,反之,会对其进行拆箱 4、当两种不同类型用 == 比较时,包装器类需要拆箱..., 当同种类型用==比较时,会自动拆箱或者装箱

    75800

    详解Java自动装箱与拆箱(Autoboxing and unboxing)

    参考链接: Java自动装箱和拆箱 一、什么是自动装箱拆箱  很简单,下面两句代码就可以看到装箱和拆箱过程  //自动装箱 Integer total = 99; //自定拆箱 int totalprim...= total;  简单一点说,装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。 ...下面我们来看看需要装箱拆箱类型有哪些:  这个过程是自动执行,那么我们需要看看它执行过程:  public class Main {     public static void main(String...方法实现是类似的。 ...参考文章:  Java自动装箱与拆箱及其陷阱  深入剖析Java装箱和拆箱   欢迎关注微信公众号:DroidMind    精品内容独家发布平台       呈现与博客不一样技术干货

    29140

    深入探究Java自动拆箱与装箱实现原理

    自动拆箱和装箱简介Java自动拆箱和装箱是由JDK1.5引入新特性。...自动拆箱和装箱概念主要涉及到基本类型变量和封装类型变量之间转换。源代码解析自动拆箱在Java中,自动拆箱是将封装类型变量自动转换为基本类型变量。...int i = 10;Integer j = i;在调用泛型方法时,需要将基本类型变量转换为对应封装类型,以便能够使用集合类型。...然后分别调用了该实例autoUnboxing和autoBoxing方法,并向这两个方法传入了整数类型参数1和2。程序具体功能需要查看AutoBoxing类代码。...然后分别调用了该实例autoUnboxing和autoBoxing方法,并向这两个方法传入了整数类型参数1和2。程序具体功能需要查看AutoBoxing类代码。

    26561

    java自动拆箱、装箱是指什么? 原

    JAVA语言中有个名词叫自动拆箱、装箱,那这个自动拆箱、装箱到底是指啥? 自动拆箱、装箱是从JDK1.5开始才有的特性,其实它主要就是指基本类型与包装类自动转换。...所以在JDK1.5开始,它们之间转换不在须要程序员再去进行转换了,JDK已经将它自动进行了转换,这种操作就叫自动拆箱、装箱。...int i = 5; Integer ii = i; //这种写法在JDK1.5及以后版本是正确,因为系统会自动将int向Integer进行转换,这种操作就叫自动装箱。...int j = ii; //这种写法是将Integer自动转换成了int基本类型,这种自动转换方法就叫自动拆箱。...2.int是基本类型,而Integer是包装类,可以自动 拆箱、拆箱,Integer封装了很多方法

    86920

    深入理解java自动装箱与拆箱

    大家好,又见面了,我是全栈君 一、什么是装箱,什么是拆箱 装箱:把基本数据类型转换为包装类。 拆箱:把包装类转换为基本数据类型。...举例 Integer i1=Integer.valueOf(3); int i2=i1.intValue(); 手动装箱是通过valueOf完成,大家都知道 = 右边值赋给左边,3是一个int类型,...手动拆箱是通过intValue()完成,通过代码可以看到 i1 从Integer变成了int 三、手动看完了,来看自动 为了减轻技术人员工作,java从jdk1.5之后变为了自动装箱与拆箱,还拿上面那个举例...四、从几道题目中加深对自动装箱和拆箱理解 (1) Integer a = 100; int b = 100; System.out.println(a==b);结果为 true 原因:a 会自动拆箱和...,不会new 对象,而是直接到常量池中获取,所以100是true,200超过了这个范围然后进行了 new 操作,所以内存地址是不同

    45910

    java之学习Integer自动装箱自动拆箱(JDK5新特性)

    Integer自动装箱自动拆箱 概述: 自动装箱:把基本类型转换为包装类类型 自动拆箱:把包装类类型转换为基本类型 注意事项 在使用时,Integer x = null;代码就会出现NullPointerException...案例代码 package com.ifenx8.study.array; public class Demo_JDK5 { /** * A:JDK5新特性 * 自动装箱:把基本类型转换为包装类类型...* 自动拆箱:把包装类类型转换为基本类型 * B:案例演示 * JDK5新特性自动装箱和拆箱 * Integer ii = 100; * ii += 200; * C:注意事项 *...(“=====================”); Integer i2 = a + 100;//自动装箱,把int基本类型转换成包装类型 System.out.println(i2); int a3...= i2 – 100;//自动拆箱,把Integer类转换成基本类型 System.out.println(a3); System.out.println(“====================

    31230

    从一个 NullPointerException 探究 Java 自动装箱拆箱机制

    test(value); } } main 方法代码实际上相当于调用 test(null);,为什么不直接这样写呢?...因为以前只知道 Java 为一些基础数据类型与对应包装器类型之间提供了自动装箱拆箱机制,而并不知这机制具体实现方法是怎么样,正好学习一下。...自动装箱与拆箱 自动装箱与拆箱是 Java 1.5 引入新特性,是一种语法糖。...比如 Integer value = 10;,是通过调用 Integer.valueOf 方法实现转换自动拆箱,是指从包装类对象到其对应基本数据类型自动转换。...ArrayList(); list.add(10); // 自动装箱方法调用时) int i = list.get(0); // 自动拆箱(赋值时) 注:集合(Collections)里不能直接放入原始类型

    51820

    从一个 NullPointerException 探究 Java 自动装箱拆箱机制

    test(value); } } main 方法代码实际上相当于调用 test(null);,为什么不直接这样写呢?...因为以前只知道 Java 为一些基础数据类型与对应包装器类型之间提供了自动装箱拆箱机制,而并不知这机制具体实现方法是怎么样,正好学习一下。...自动装箱与拆箱 自动装箱与拆箱是 Java 1.5 引入新特性,是一种语法糖。...比如 Integer value = 10;,是通过调用 Integer.valueOf 方法实现转换自动拆箱,是指从包装类对象到其对应基本数据类型自动转换。...ArrayList(); list.add(10); // 自动装箱方法调用时) int i = list.get(0); // 自动拆箱(赋值时) 注:集合(Collections)里不能直接放入原始类型

    42810

    夯实Java基础系列2:Java基本数据类型,以及自动装箱里隐藏秘密

    目录 Java 基本数据类型 Java 两大数据类型: 内置数据类型 引用类型 Java 常量 自动拆箱和装箱(详解) 实现 自动装箱与拆箱中“坑” 了解基本类型缓存(常量池)最佳实践 总结: 基本数据类型存储方式...也就是说,虚拟机根本不知道有自动拆箱和自动装箱这回事;在将Java源文件编译为class文件过程中,javac编译器在自动装箱时候,调用了Integer.valueOf()方法,在自动拆箱时,又调用了...实现总结:其实自动装箱自动封箱是编译器为我们提供一颗语法糖。在自动装箱时,编译器调用包装类型valueOf()方法;在自动拆箱时,编译器调用了相应xxxValue()方法。...包装类型 == 基本类型时,包装类型自动拆箱; 需要注意是:“==”在没遇到算术运算时,不会自动拆箱;基本类型只会自动装箱为对应包装类型,代码中最后一条说明内容。...在JDK 1.5中提供了自动装箱自动拆箱,这其实是Java 编译器语法糖,编译器通过调用包装类型valueOf()方法实现自动装箱调用xxxValue()方法自动拆箱。

    3.5K00
    领券