当前位置:  开发笔记 > 编程语言 > 正文

如何将字符串转换为整数?

如何解决《如何将字符串转换为整数?》经验,为你挑选了1个好方法。

在第一种情况下,您只是打印adjMatrix[3].get(0).编译器认为此表达式是Integer.但实际类型并不重要:生成的字节码是

  37: invokevirtual #8                  // Method java/util/LinkedList.get:(I)Ljava/lang/Object;
  40: invokevirtual #9                  // Method java/io/PrintStream.println:(Ljava/lang/Object;)V

所以它只是将它从列表中获取的对象传递给它PrintStream.println(Object),然后调用String.value()该对象.编译器从不向字节码添加强制转换,因为它不是必需的.

在第二种情况下,您打印stringList[1].get(0)+"",编译器认为它是String与空String的串联.所以生成的字节码是

 101: invokevirtual #8                  // Method java/util/LinkedList.get:(I)Ljava/lang/Object;
 104: checkcast     #14                 // class java/lang/String
 107: invokevirtual #15                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
 110: ldc           #16                 // String 
 112: invokevirtual #15                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
 115: invokevirtual #17                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
 118: invokevirtual #18                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V

如您所见,这里有一个checkcast指令,因为字节码需要调用StringBuilder.append(String),因此需要将表达式强制转换为String.因为它实际上是一个Integer,所以它会引发ClassCastException.



1> JB Nizet..:

在第一种情况下,您只是打印adjMatrix[3].get(0).编译器认为此表达式是Integer.但实际类型并不重要:生成的字节码是

  37: invokevirtual #8                  // Method java/util/LinkedList.get:(I)Ljava/lang/Object;
  40: invokevirtual #9                  // Method java/io/PrintStream.println:(Ljava/lang/Object;)V

所以它只是将它从列表中获取的对象传递给它PrintStream.println(Object),然后调用String.value()该对象.编译器从不向字节码添加强制转换,因为它不是必需的.

在第二种情况下,您打印stringList[1].get(0)+"",编译器认为它是String与空String的串联.所以生成的字节码是

 101: invokevirtual #8                  // Method java/util/LinkedList.get:(I)Ljava/lang/Object;
 104: checkcast     #14                 // class java/lang/String
 107: invokevirtual #15                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
 110: ldc           #16                 // String 
 112: invokevirtual #15                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
 115: invokevirtual #17                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
 118: invokevirtual #18                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V

如您所见,这里有一个checkcast指令,因为字节码需要调用StringBuilder.append(String),因此需要将表达式强制转换为String.因为它实际上是一个Integer,所以它会引发ClassCastException.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有