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

深度解析Java可变参数类型以及与数组的区别

这篇文章主要介绍了Java方法的可变参数类型,通过实例对Java中的可变参数类型进行了较为深入的分析,需要的朋友可以参考下。 ? Java方法中的可变参数类型是一个非常重要的概念,有着非常广泛的应用。...看到这里估计都能明白,这个不定长的参数其实和数组参数挺像的。事实上,也确实是这么回事儿。...编译器会在悄悄地把这最后一个形参转化为一个数组形参,并在编译出的class文件里作上一个记号,表明这是个实参个数可变的方法。...,但是数组类参数却无法兼容可变参数。...其实对于第二段代码而言,编译器并不知道什么可变不可变,在它看来,需要定义一个dealArray(int, int, int)类的方法。所以,自然就无法去匹配数组类参数的dealArray方法了。

71120
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    “Array of *”灵活的可变数组:满足可变需求的完美选择

    其中,Array[*]of *是 TIA 平台中的一种数据类型,表示一个可变长度的数组。其中,[*]表示数组的长度可以是任意值,固定表达方式为[1..20]。而*表示数组中的元素类型的可以是任何类型。...例如,可以定义一个 Array[*] of INT 类型的数组,表示一个可变长度的整数数组。...; 2 优点 可变数组是一个非常强大的数据类型,使用它可以让程序更加灵活。...我们还要有一个可变数组用于存放灯的输出定义为:Array[*] of Bool。...将两个功能块结合起来就变成了可变切换时间的跑马灯程序了。 4 总结 Array[*] of的数组长度和类型是可变的,可以根据实际需求来定义数组的大小。这使得数组可以适应多种应用场景。

    1.2K30

    Java 可变参数

    Java1.5增加了新特性:可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。注意:可变参数必须位于最后一项。...当可变参数个数多余一个时,必将有一个不是最后一项,所以只支持有一个可变参数。...因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项。...可变参数的特点: (1)只能出现在参数列表的最后;  (2)位于变量类型和变量名之间,前后有无空格都可以; (3)调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中一数组的形式访问可变参数

    1.7K100

    Java 可变对象和不可变对象

    Java 可变对象和不可变对象 作者:幽鸿   Mar 14, 2016 10:21:27 PM 一、简单定义            不可变对象(Immutable Objects)即对象一旦被创建它的状态...不可变对象的类即为不可变类(Immutable Class)。Java平台类库中包含许多不可变类,如String、基本类型的包装类、BigInteger和BigDecimal等。...在《Effective Java》一书中, Joshua Bloch提出了一个强制性的建议 :      "类应该是不可变的,除非有很好的理由让它是可变的....如果一个类不能设计为不可变的,也要尽可能的限制它的可变性...Java 类库中的基本数据类型的包装类(如Integer 、 Long 和 Float )都是不可变的,其它数字类型(如 BigInteger 和 BigDecimal )也是不可变的。...另一个适合用不可变类实现的好示例就是 事件 。事件的生命期较短,而且常常会在创建它们的线程之外的线程中消耗,所以使它们成为不可变的是利大于弊。大多数 AWT 事件类都没有 严格的 作为不可变类来实现。

    1.9K20

    go语言中的数组切片:特立独行的可变数组

    初看go语言中的slice,觉得是可变数组的一种很不错的实现,直接在语言语法的层面支持,操作方面比起java中的ArrayList方便了许多。...,生成的切片里的array指针实际指向了原数组的一个位置,相当于c的代码中对原数组截取生成新的数组[2]arrNew,数组的指针指向arr[3],所以改变切片里0下标对应元素的值,实际上也就改变了原数组相应数组位置...按理说对sliceA进行append操作,在没有达到切片容量的情况下根本不需要重新申请一个新的大容量的数组,只需要在原本数组内修改元素的值。...虽然append()语法中,第二个参数不能为slice,但是第二个参数其实是一个可变参数elems ...Type,可以传输打散的数组,所以go在处理时同样是转换为slice来操作的。...4.声明无长度的数组 声明无长度的数组其实就是声明了一个可变数组,也就是slice切片。只不过这个切片的len和cap都是0。

    1.1K40

    C语言0长度数组(可变数组柔性数组)详解

    }; 首先对 0长度数组, 也叫柔性数组 做一个解释 : 用途 : 长度为0的数组的主要用途是为了满足需要变长度的结构体 用法 : 在一个结构体的最后, 申明一个长度为0的数组, 就可以使得这个结构体是可变长的...对于编译器来说, 此时长度为0的数组并不占用空间, 因为数组名本身不占空间, 它只是一个偏移量, 数组名这个符号本身代表了一个不可修改的地址常量 (注意 : 数组名永远都不会是指针!)...GNU C 的0长度数组, 也叫变长数组, 柔性数组就是这样一个扩展....当使用data[0]的时候, 也就是0长度数组的时候,0长度数组作为数组名, 并不占用存储空间....这就涉及到数组和指针的问题了. 有时候吧,这两个是一样的,有时候又有区别。 首先要说明的是,支持0长度数组的扩展,重点在数组,也就是不能用int *y指针来替换。sizeof的长度就不一样了。

    5.9K10

    Java中的可变对象(Mutable)与不可变对象(Immutable)

    在本文中,我不仅将分享在 Java 中Immutable的步骤,还将讨论可变对象与不可变对象及其优缺点。这也是一个常见的 String 面试问题 ,Java 开发人员也应该意识到这一点。  ...Java 中的可变类和不可变类是什么? 在 Java 中,可变类和不可变类的概念指的是对象创建后其状态是否可以更改。可变类是指实例创建后可以修改的类,而不可变类一旦创建就不能改变其状态。...要使对象不可变,请确保它们只有非数组的final字段(在 Java 中数组总是可变的),并且所有字段类型也只有final字段。...Java 中不可变对象与可变对象的区别 以下是 Java 中可变类和不可变类之间的一些主要区别: 1. 修改 可变对象在创建后可以修改,但不可变对象在创建后不能修改。 2....总结 这就是Java 中的不可变类和可变类的全部内容。 本文不仅介绍了什么是可变类和不可变类,还介绍了它们之间的区别。在可变类和不可变类之间做出选择,取决于程序的具体要求和所需对象的特性。

    38030

    Java 可变参数 原

    Java1.5增加了新特性: 可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。 注意:可变参数必须位于最后一项。...当可变参数个数多余一个时,必将有一个不是最后一项,所以只支持有一个可变参数。...因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项。...可变参数的特点: (1)、只能出现在参数列表的最后;  (2)、...位于变量类型和变量名之间,前后有无空格都可以; (3)、调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中一数组的形式访问可变参数

    67930

    Java-不可变类的实现

    这样的特性对JAVA来说带来怎样的好处? 线程安全 不可变对象是线程安全的,在线程之间可以相互共享,不需要利用特殊机制来保证同步问题,因为对象的值无法改变。...public final class String implements java.io.Serializable, Comparable, CharSequence { /** The...当传入可变数组value[]时,进行copy而不是直接将value[]复制给内部变量. 获取value时不是直接返回对象引用,而是返回对象的copy....譬如你想加载java.sql.Connection类,而这个值被改成了myhacked.Connection,那么会对你的数据库造成不可知的破坏。 4. 支持hash映射和缓存。...(true); //获取s对象上的value属性的值 char[] value = (char[]) valueFieldOfString.get(s); //改变value所引用的数组中的第5个字符

    1.3K10

    JAVA不可变类(immutable)机制与String的不可变性

    这样的特性对JAVA来说带来怎样的好处? 线程安全 不可变对象是线程安全的,在线程之间可以相互共享,不需要利用特殊机制来保证同步问题,因为对象的值无法改变。...当传入可变数组value[]时,进行copy而不是直接将value[]复制给内部变量. 获取value时不是直接返回对象引用,而是返回对象的copy....譬如你想加载java.sql.Connection类,而这个值被改成了myhacked.Connection,那么会对你的数据库造成不可知的破坏。 4. 支持hash映射和缓存。...(true); //获取s对象上的value属性的值 char[] value = (char[]) valueFieldOfString.get(s); //改变value所引用的数组中的第...参考资料 [1] http://my.oschina.net/zzw922cn/blog/487610 [2] java的String 为什么是不可变的:http://www.codeceo.com/article

    1.7K20

    【Java基础】可变长参数

    本篇目录 1- 什么是可变长参数 2- 可变长参数的定义 3- 可变长参数的使用 4- 遍历可变长参数 1 什么是可变长参数 可变长参数顾名思义是可以改变长度的参数,意为传入的参数个数可以不固定。...Java中什么数据类型可以改变长度?当然是数组。确实,在JDK5之前的确是使用数组来实现可变长参数。 那么什么是可变长参数?...,而可变长参数是定义在形参中,并且可以与其他类型的参数组合使用。...class [Ljava.lang.String; class的描述中,可变长参数以“[”开头,表示它是一个数组。...既然是一个数组我们就可以以遍历数组的方式遍历这个可变长参数,如: // 遍历可变长参数 public static void test(Integer number,String...args){

    63210

    Java不可变类机制

    参考链接: Java 如何创建不可变类 不可变类(Immutable Class):所谓的不可变类是指这个类的实例一旦创建完成后,就不能改变其成员变量值。...可变类(Mutable Class):相对于不可变类,可变类创建实例后可以改变其成员变量值,开发中创建的大部分类都属于可变类。  不可变类的特性对JAVA来说带来怎样的好处? ...可以降低并发错误的可能性,因为不需要用一些锁机制等保证内存一致性问题也减少了同步开销。  2)易于构造、使用和测试。  不可变类的设计原则  如何在Java中写出Immutable的类?...char[] value = (char[]) valueFieldOfString.get(s); value[5] = '_'; //改变value所引用的数组中的第5个字符 System.out.println...也就是说,通过反射是可以修改所谓的“不可变”对象的。  不可变类是实例创建后就不可以改变成员变量的值。

    95920
    领券