本文将介绍Java的varargs性能的详细情况,特别是关于javavarargs的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于androidst
本文将介绍Java的varargs性能的详细情况,特别是关于java varargs的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于android studio出现警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用、Java 7中的简化Varargs方法调用、Java 9中私有方法的@SafeVarargs注解?、Java Varargs 可变参数使用的知识。
本文目录一览:- Java的varargs性能(java varargs)
- android studio出现警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用
- Java 7中的简化Varargs方法调用
- Java 9中私有方法的@SafeVarargs注解?
- Java Varargs 可变参数使用
Java的varargs性能(java varargs)
编码我来检查Java的vararg性能。
我编写以下测试代码:
public class T { public static void main(String[] args) { int n = 100000000; String s1 = new String(""); String s2 = new String(""); String s3 = new String(""); String s4 = new String(""); String s5 = new String(""); long t = System.currentTimeMillis(); for (int i = 0; i < n; i++) { foo(); } System.err.println(System.currentTimeMillis() - t); t = System.currentTimeMillis(); for (int i = 0; i < n; i++) { baz(s1, s2, s3, s4, s5); } System.err.println(System.currentTimeMillis() - t); t = System.currentTimeMillis(); for (int i = 0; i < n; i++) { bar(s1, s2, s3, s4, s5); } System.err.println(System.currentTimeMillis() - t); } static void foo() { } static void bar(String a1, String a2, String a3, String a4, String a5) { } static void baz(String... a) { }}
在我的机器上,平均输出为:
78469678
似乎将变量传递给方法是免费的!好!
但是使用varags慢60倍!为什么呢
一种解释可能是程序必须在堆上创建数组,而时间是由GC花费的。但是对于更少的循环,我仍然得到输出:
0620
什么花费了这些额外的时间,反正编译器拥有将其解决为fix变量调用的所有信息…
这不是我打算为此进行优化的意图,但是我发现这很好奇…
更新资料
我添加了一个新测试
t = System.currentTimeMillis();for (int i = 0; i < n; i++) { baz(s1);}System.err.println(System.currentTimeMillis() - t);
而且这个参数版本仍然慢30倍。也许在幕后有一个ArrayList.toArray()?
因此,请注意代码中不需要的varags方法,并进行重构以固定长度。这可能会提高性能。
答案1
小编典典静态参数列表与数组完全不同。当您以这种方式传递它们时,编译器将为引用保留空间,并在调用该方法时填充它们。
Varargs与array等效。要调用这种方法,必须在运行时创建并填充数组。这就是为什么您观察到差异。
String[]
并且String...
是同义词。如果比较它们,应该会看到相同的性能。
android studio出现警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用
Error:(61, 45) 警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用;对于 varargs 调用, 应使用 Object
对于非 varargs 调用, 应使用 Object[], 这样也可以抑制此警告
AS出现这个是什么原因,但是APP能编译能安装
Java 7中的简化Varargs方法调用
在Java 7中,可以选择添加@SafeVarargs
注释来抑制在编译带有不可修改的varargs参数的方法时收到的警告。Project
Coin的提案规定,当该方法确保仅将与varargs参数相同类型的元素存储在varargs数组中时,应使用注释。
非安全方法的一个例子是什么?
Java 9中私有方法的@SafeVarargs注解?
@SafeVarargs 注解是在 Java 7 中引入的。该注解适用于final和static方法或采用可变参数的构造函数。此注释用于确保方法不会对其可变参数执行不安全的操作。从 Java 9 开始,@SafeVarargs 注解也适用于私有实例方法。
语法
<strong>@SafeVarargs private void methodName(...) { // some statements }</strong>
示例
import java.util.ArrayList; import java.util.List; public class SafevarargsTest { <strong>@SafeVarargs // Apply @SafeVarargs to private methods</strong> private void display(List<String>... names) { for(List<String> name : names) { System.out.println(name); } } public static void main(String args[]) { SafevarargsTest test = new SafevarargsTest(); List<String> list = new ArrayList<String>(); list.add("TutorialsPoint"); list.add("Tutorix"); test.display(list); } }
输出
<strong>[TutorialsPoint, Tutorix]</strong>
以上就是Java 9中私有方法的@SafeVarargs注解?的详细内容,更多请关注php中文网其它相关文章!
Java Varargs 可变参数使用

Java1.5 提供了一个叫 varargs 的新功能,就是可变长度的参数。
"Varargs" 是 “variable number of arguments” 的意思。有时候也被简单的称为 “variable arguments”。
定义实参个数可变的方法:只要在一个形参的 "类型" 与 "参数名" 之间加上三个连续的 "."(即 "...",英文里的句中省略号),就可以让它和不确定个实参相匹配。
以下实例创建了 sumvarargs () 方法来统计所有数字的值。
我们在这里的 Main 方法中添加了 new int []{10, 12, 33, 7} 4 个参数,实际上你可以在这里持续添加不同的参数,在计算 sum 的方法中都可以根据你添加的参数来进行处理。
GIT
请参考 GitHub 上的源码代码:
https://github.com/cwiki-us/java-tutorial/blob/master/src/main/java/com/ossez/lang/tutorial/usecases/VarargsCase.java
SRC
package com.ossez.lang.tutorial.usecases; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * variable arguments use case */ public class VarargsCase { private static final Logger logger = LoggerFactory.getLogger(VarargsCase.class); /** * sumVarargs * * @param intArrays * @return */ static int sumVarargs(int... intArrays) { int sum, i; sum = 0; for (i = 0; i < intArrays.length; i++) { sum += intArrays[i]; } return (sum); } /** * Main Function * * @param args */ public static void main(String args[]) { int sum = 0; sum = sumVarargs(new int[]{10, 12, 33, 7}); logger.debug("The Sum of the arrays: {}", sum); } }
OUTPUT
程序运行的输出结果为:
2020/01/27 14:33:52 DEBUG [com.ossez.lang.tutorial.usecases.VarargsCase] - The Sum of the arrays: 62
https://www.cwiki.us/pages/viewpage.action?pageId=57933901
今天关于Java的varargs性能和java varargs的分享就到这里,希望大家有所收获,若想了解更多关于android studio出现警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用、Java 7中的简化Varargs方法调用、Java 9中私有方法的@SafeVarargs注解?、Java Varargs 可变参数使用等相关知识,可以在本站进行查询。
本文标签: