美文网首页
JDK5-可变参数(类型转换问题)

JDK5-可变参数(类型转换问题)

作者: Josaber | 来源:发表于2016-12-23 22:35 被阅读0次

形如:public void function(int arg, int... args)
可变参数隐式地创建一个数组
注意:可变参数必须出现在参数列表的最后,否则使用数组

分析以下程序:

public class VarParameter {

    public static void main(String[] args) {
        printArr(1, 2, 3);
        printArr(new Integer[] { 1, 2, 3 });
        printArr(new int[] { 1, 2, 3 });
        printArr("1", "2", "3");
        printArr(new String[] { "1", "2", "3" });
        printArr(new Object[] { new String[] { "1", "2", "3" } });
        printArr((Object) new String[] { "1", "2", "3" });
    }

    private static void printArr(Object... args) {
        System.out.println(args.length);
    }
}

输出结果为:

3
3
1
3
3
1
1

分析:

  1. 传递参数为1,2,3时,隐式地构造args = new Object[]{1, 2, 3};
  2. 传递参数为new Integer[]{1,2,3}时,隐式地将Integer[]转变为Object[]
  3. 传递参数为new int[]{1,2,3}时,将int[]转变为Object,因此Object数组的长度只有一(基本类型无法直接转变为Object)
  4. 传递参数为"1","2","3"时,隐式地构造args = new Object[]{"1", "2", "3"};
  5. 传递参数为new String[]{"1", "2", "3"}时,隐式地将String数组转变为Object数组
  6. 传递参数为new Object[] {new String[]{"1", "2", "3"}}时,将String数组作为Object数组的一个元素进行传递
  7. 传递参数为(Object)new String[]{"1", "2", "3"}时,强制地将String数组转变为Object类型(数组的Superclass为Object

再分析一个:

import java.util.Arrays;
import java.util.List;

public class VarParameter {

    public static void main(String[] args) {
        List list = Arrays.asList(new int[]{1,2,3});
        System.out.println(list.size());
    }
}

同样的道理,本程序的输出结果也为1。

相关文章

  • JDK5-可变参数(类型转换问题)

    形如:public void function(int arg, int... args)可变参数隐式地创建一个数...

  • Python自学笔记——3.基础数据类型转换

    基础数据类型转换 数据类型转换的形式自动类型转换强制类型转换 可变数据类型: 列表, 字典, 集合不可变数...

  • 跟我一起学习GO语言007

    接上节,获得可变参数类型,可变参数为interface{}类型时,可以传入任何类型的值。 func printTy...

  • Go语言可变参数

    可变参数 参数数量可变的函数称为可变参数函数 在声明可变参数函数时,需要在参数列表的最后一个参数类型之前加上省略符...

  • python控制流和函数参数、匿名函数和闭包

    @[toc] 函数的参数传递 不可变类型传值 如数、字符串、元组 可变类型传引用 如列表、字典、集合 参数类型 必...

  • python-函数的可变参数

    可变参数定义为 def 函数名(*可变参数名),可变参数类型为元组,注意在函数内不可修改。但可以通过for循环迭代...

  • java 可变参数

    可变参数 可变参数是参数的个数为任意个,参数的类型不能改变 一个方法中,只能有一个可变参数 当一个方法中有多个参数...

  • JavaSE进阶十一 反射机制二

    1,可变长度参数 语法:类型... (注意:一定是3个点) 可变长度参数要求参数个数是:0-N个。 可变长度参数在...

  • Python参数传递和一些坑

    Python 中的参数传递模式是共享传参 如果可变对象作为默认值的话,会导致一些问题 建议不要使用可变类型作为参数...

  • *args和**kwargs的区别

    *args和**kwargs均是用来接收可变参数,其中: *args用来接收tuple类型可变参数 **kwarg...

网友评论

      本文标题:JDK5-可变参数(类型转换问题)

      本文链接:https://www.haomeiwen.com/subject/htclvttx.html