`

可变参数本质是数组的理解

    博客分类:
  • Java
阅读更多
1、一个方法后面,只能有一个可变参数,并且只能放到最后。
2、
package test;
* 
* @author 
*/
public class Test{
  public static void main(String[] args) {
    String var = null;
    test(var);
    test("123");
    test(null);
  }

  public static void test(String... vars) {
    if (vars != null) {
      System.out.println("vars.length: " + vars.length);
    } else {
      System.out.println("vars is null");
    }
  }
}


String var=null;
String[] vars=null;
test(var);//结果非null
test(null);
test(“123”);
test(vars);//结果是null

有了红色部分,对比绿色部分,你会很容易理解,可变参数的本质:
这个可变参数实际在本质上还是是数组,参数最终都被JDK包装成了数组,也就是不管传来的是Object还是Object[]都被转成了Object[]

当传入的参数是单个参数时,JDK的处理手段是转成数组的一个成员。

链接:
http://fusu.com.cn/article.asp?id=22
分享到:
评论

相关推荐

    C51可变参数讲解.pdf

    值得注意的是,在C51环境下,可变参数函数的处理方式与标准C环境中的处理方式在本质上是相同的,但是可能会有一些特定于平台的限制或者细微差异。例如,某些特定的硬件平台可能对内存访问或者数据对齐有特殊要求,...

    Java 实例 - Varargs 可变参数使用源代码-详细教程.zip

    - 尽管可变参数看起来像多个参数,但实质上它是一个数组,因此可以用数组的所有操作对其进行处理,如length属性、索引访问等。 4. 在实际项目中的应用: - 参数列表不确定:如果你需要创建一个方法,它可能接收...

    Java中支持可变参数详解

    首先,理解可变参数的本质。可变参数实际上是一个数组,在编译时会被转换为数组形式。当你传递多个参数给一个可变参数的方法时,这些参数会被自动封装到一个数组中。例如,`printArgumentsInfo("aaa", "bbb", "ccc",...

    如何掌握C语言中数组_指针与地址相互关系.pdf )

    `这样的动态内存分配用于创建可变大小的数组。 3. **数组的赋值与输出** 数组可以整体赋值,也可以通过下标逐个赋值。例如,`char str[] = "Hello";`是对字符串的初始化赋值。数组的输出通常通过循环遍历每个元素...

    java可变长参数(三个点)md,学习代码

    因为可变长参数不能紧跟在非可变参数之后。 在实际编程中,可变长参数常常用于简化函数调用,例如`Arrays.asList()`和`String.format()`等。在Java Web开发中,比如使用Servlet处理HTTP请求时,有时也需要使用可变...

    数组名 != 指针

    然而,数组名本身是不可变的,不能对其进行加减运算。例如,`intArray++;`这样的表达式会导致编译错误。 ```cpp int intArray[10]; intArray++; // 编译错误 ``` 3. **数组名的内涵与外延**: - **内涵**:...

    数组和指针的艺术,就是艺术!

    数组名在这个意义上是不可变的,不能赋值给其他指针,但可以用作函数参数传递数组的首地址。 第三章“数组学的解剖学”深入探讨了数组的内部工作原理,包括如何初始化、访问和操作数组元素,以及数组作为函数参数时...

    全国计算机二级:C语言之指针、数组和函数

    - **特点**:可变性,指针可以被重新赋值,指向不同的内存区域。 ##### 数组:连续内存中的数据集合 - **本质**:数组是一系列相同类型数据的集合,存储在连续的内存区域中。 - **特性**:数组名称实际上是一个...

    java东方标准大唐电信

    这是因为可变参数实质上被视为一个数组,如果放在前面,编译器无法区分普通参数和可变参数,可能导致混淆。 3. 可变参数的唯一性 每个方法只能有一个可变参数,不允许在同一个方法中声明多个可变参数。如果需要...

    全国计算机二级:C语言之指针、数组和函数.pdf

    - 数组的内容可以修改,但数组的长度在声明后不可变。 - 当数组作为函数参数时,会退化为指向数组首元素的指针。 3. **函数**: - 函数可以接受指针作为参数,这样可以间接操作数组或其他变量。 - 在函数内部,...

    语言详解指针和数组PPT学习教案.pptx

    - 混淆的来源在于,数组名和指针在某些情况下可以互换使用,但它们本质上是不同的概念,比如数组名是不可变的,而指针可以改变。 **3. 使用技巧** - 在函数参数中,数组参数通常被当作指针处理,因为数组名传递给...

    C语言中数组与指针的探讨.pdf

    但这并不意味着数组名是可变的,事实上,数组名在程序中被视为常量,不能被重新赋值。 此外,多维数组在C语言中也是通过指针来实现的。例如,二维数组可以看作是一组数组的数组,每个数组元素本身就是一个一维数组...

    cpp.rar_cpp指针数组

    除了静态初始化,还可以使用动态内存分配创建指针数组,这在处理大小未知或可变的数据集时特别有用。例如,可以使用`new`运算符来分配内存: ```cpp int size; // 获取数组大小... int **pa = new int*[size]; // ...

    数组和指针的关系

    `,它是一个不可变的指针,意味着你不能改变`cptr`所指向的地址,但可以通过它来修改所指向的值(如果值是可变的)。 数组和指针的相似之处在于,当数组作为函数参数传递时,通常会“降级”为指针,因为数组的名称...

    C++指针——数组指针/函数指针

    数组指针和函数指针结合使用可以实现更复杂的功能,如动态分配多维数组或实现可变参数的函数。例如,可以定义一个函数,该函数接受一个指向整数数组的指针,并通过函数指针进行处理: ```cpp void processArray(int...

    嵌入式 C 精华总结

    本文将深入探讨嵌入式 C 的关键知识点,特别是指针、数组、类型识别和可变参数函数。 1. **指针** - 指针的本质是存储地址的数据类型。C 语言中的指针允许直接操作内存,提供高度的灵活性和性能。 - 指针可以指向...

    C语言程序设计课件:7 指针、指针与数组.ppt

    指针变量是可以改变其存储的地址的,而指针常量,如数组名,是不可变的,它们始终指向同一内存位置。例如,一旦声明了一个指针常量`int *const p = &i`,就不能再改变`p`所指向的地址,但可以通过`*p`来修改该地址上...

    Java中Varargs机制的理解.docx

    在Java 5之前,如果需要编写一个能够接收数量可变的参数的方法,通常的做法是通过数组来实现。例如,`main`方法就是通过一个字符串数组来接收命令行参数。这种方式虽然可以达到目的,但在调用时却显得不够简洁。 ...

Global site tag (gtag.js) - Google Analytics