当前位置: 首页 > 面试题库 >

使用原语及其包装方法的方法重载

黄弘盛
2023-03-14
问题内容

我正在尝试制定以下方案中使用的规则。请解释为什么我得到2种不同的输出。

方案1的输出: 我是一个对象。

class Test {

    public static void main (String[] args) {

        Test t = new Test(); 
        byte b_var = 10;
        t.do_the_test(b_var);
    }

    public void do_the_test(Character c) {

       System.out.println("I am a character.");
    }

    public void do_the_test(Integer i) {

      System.out.println("I am an integer.");
    }

    public void do_the_test(Object obj) {

      System.out.println("I am an object.");
    }
}

方案2的输出: 我是整数。

class Test {

    public static void main (String[] args) {

        Test t = new Test(); 
        byte b_var = 10;
        t.do_the_test(b_var);
    }

    public void do_the_test(char c) {

       System.out.println("I am a character.");
    }

    public void do_the_test(int i) {

      System.out.println("I am an integer.");
    }

    public void do_the_test(Object obj) {

      System.out.println("I am an object.");
    }
}

问题答案:

在Java语言规范说,这大约方法签名分辨率:

第一阶段(第15.12.2.2节)执行重载解析,不允许装箱或拆箱转换,也不允许使用可变Arity方法调用。如果在此阶段未找到适用的方法,则处理将继续进行到第二阶段。

在第二种情况下,涉及的方法签名int适用于不带自动装箱的情况,但具有扩大的数字转换。在第一种情况下,既需要扩展转换
需要自动装箱才能达到Integer签名。然而,Java那样 无论是 自动装箱 原语转换,不可能兼顾。



 类似资料:
  • 本文向大家介绍javascript中with()方法的语法格式及使用,包括了javascript中with()方法的语法格式及使用的使用技巧和注意事项,需要的朋友参考一下 内容导读: 有了 With 语句,在存取对象属性和方法时就不用重复指定参考对象,在 With 语句块中,凡是 JavaScript 不识别的属性和方法都和该语句块指定的对象有关。With 语句的语法格式如下所示: 这样,您在使用

  • 本文向大家介绍Node.js模块封装及使用方法,包括了Node.js模块封装及使用方法的使用技巧和注意事项,需要的朋友参考一下 Node.js中也有一些功能的封装,类似C#的类库,封装成模块这样方便使用,安装之后用require()就能引入调用. 一、Node.js模块封装  1.创建一个名为censorify的文件夹  2.在censorify下创建3个文件censortext.js、packa

  • 本文向大家介绍Javascript Symbol原理及使用方法解析,包括了Javascript Symbol原理及使用方法解析的使用技巧和注意事项,需要的朋友参考一下 Symbol是ES6中新引入的一种基本数据类型,在此之前JavaScript中已有几种基本数据类型: Numberg String Boolean Null Undefined Object 不同于其他基本类型的通俗易懂,Symbo

  • 本文向大家介绍Python join()函数原理及使用方法,包括了Python join()函数原理及使用方法的使用技巧和注意事项,需要的朋友参考一下 函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join(): 连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串 os.path.join

  • 本文向大家介绍Python timeit模块原理及使用方法,包括了Python timeit模块原理及使用方法的使用技巧和注意事项,需要的朋友参考一下 Python 中的 timeit 模块可以用来测试一段代码的执行耗时,如一个变量赋值语句的执行时间,一个函数的运行时间等。 timeit 模块是 Python 标准库中的模块,无需安装,直接导入就可以使用。导入时直接 import timeit ,

  • 本文向大家介绍vue jsx 使用指南及vue.js 使用jsx语法的方法,包括了vue jsx 使用指南及vue.js 使用jsx语法的方法的使用技巧和注意事项,需要的朋友参考一下 vue  jsx  语法与 react  jsx  还是有些不一样,在这里记录下。 好了,下面看下vue.js 使用jsx语法的方法 1、创建一个测试的组件 2、把编辑器js语言的版本设置成jsx,这样编辑器 可以正