Java 集合框架的动态强制转换效应

Java 集合框架的动态强制转换效应,java,performance,generics,casting,dynamic-cast,Java,Performance,Generics,Casting,Dynamic Cast,案例A: 列出MyList; while(index两者的性能应该相同。第一个版本确实创建了JVM强制转换指令,但它是由编译器隐式添加的。在这两种情况下,运行时操作都是强制转换到列表。运行时不保留泛型类型 您可以通过检查字节码来验证这一点,字节码在两个版本中应该是相同的。两个版本的性能应该是相同的。第一个版本确实创建了JVM强制转换指令,但它是由编译器隐式添加的。在这两种情况下,运行时操作都是强制转换到列表。运行时不会保留泛型类型 您可以通过检查字节码来验证这一点,字节码在两个版本中应该是相同的

案例A:

列出MyList;

while(index两者的性能应该相同。第一个版本确实创建了JVM强制转换指令,但它是由编译器隐式添加的。在这两种情况下,运行时操作都是强制转换到列表。运行时不保留泛型类型


您可以通过检查字节码来验证这一点,字节码在两个版本中应该是相同的。

两个版本的性能应该是相同的。第一个版本确实创建了JVM强制转换指令,但它是由编译器隐式添加的。在这两种情况下,运行时操作都是强制转换到列表。运行时不会保留泛型类型


您可以通过检查字节码来验证这一点,字节码在两个版本中应该是相同的。

Java泛型是一种编译时抽象。字节码中没有留下它们的证据。它们只是简化了开发,但不会影响性能。在字节码中,您的第一个代码示例与第二个完全相同.Javac将为您插入强制转换。

Java泛型是一种编译时抽象。字节码中没有留下它们的证据。它们只是简化了开发,但不会影响性能。在字节码中,您的第一个代码示例看起来与第二个完全相同。Javac将为您插入强制转换。

所有泛型中的st是一个编译时功能。Java运行时与泛型无关。我建议您使用案例a,因为您总是确信列表将只包含字符串对象,而不包含其他内容。这将帮助您避免运行时出现ClassCastException,因为您总是确信列表将只包含字符串对象和没有别的了


我认为这两种方法都需要相同的执行时间,因为java运行时在这两种情况下已知的List对象是相同的(List MyList;)。在案例A中:List MyList;将作为List MyList传递给JVM,这与案例B相同。

首先泛型是一种编译时功能。Java运行时与泛型无关。我建议您使用案例A,因为您始终确信列表将只包含字符串对象,而不包含其他内容。这将帮助您避免类类型划分运行时异常,因为您始终确保列表将只包含字符串对象,而不包含其他对象


我认为这两种方法都需要相同的执行时间,因为java运行时在这两种情况下已知的List对象是相同的(List MyList;)。在案例A中:List MyList;将作为List MyList传递给JVM,这与案例B相同。

一旦您获得了它们的字节码,您将看到它们都是相同的。
因此它们的性能都没有变化。

一旦您获得了它们的字节码,您将看到它们都是相同的。
因此存在两者的性能都没有变化。

List<String> MyList;
while(index<100) {
    MyList = MyObject.get(MyIndex);
}
List MyList;
while(index<100) {
    MyList = (List<String>) MyObject.get(MyIndex);
}