【问题标题】:why Integer i = Integer.valueOf(args[0]) failed? the args[0] is a String为什么 Integer i = Integer.valueOf(args[0]) 失败了? args[0] 是一个字符串
【发布时间】:2017-03-10 07:50:00
【问题描述】:

问题描述如下:

在准备ocjp测试的过程中,遇到了一个问题,想不通是什么问题。

package test;
class Test005{
    public static void main(String[] args){

      //Integer i = args[0];//cannot convert string to Integer
        Integer I = Integer.valueOf(args[0]); // Error ArrayOutOfBoundsException :0
        int j = 12;
        System.out.println(j == i);

    }
}

第一个Integer I = args[0]是错误的,因为args[0]是一个字符串,而I是一个int;但是,第二个Ineteger I = Integer.valueOf(args[0]) 顺利执行,但是JVM 抛出错误,我就是想不通为什么?

【问题讨论】:

  • 阅读 javadoc!
  • 如果您遇到了代码中提到的 ArrayOutOfBoundsException,则不要使用参数启动程序
  • args.length 是什么?
  • 我建议你阅读Java Tutorials
  • 你在运行这个类时设置了参数吗?例如'java Test005 2'

标签: java value-of


【解决方案1】:

要运行它,您必须在运行将分配给 args[0] 的程序时传递参数,然后您的程序将正常工作。 如果您使用的是 Eclipse 之类的 IDE,您可以通过参数选项卡传递参数。 检查以下链接以查看如何在 Eclipse IDE 中传递参数: http://www.cs.colostate.edu/helpdocs/eclipseCommLineArgs.html

【讨论】:

  • @Scary 我现在不能发表评论,所以我给出了一个答案,在你投反对票之前我已经修改了。
  • 谢谢你,url真的帮了我,我现在要学习eclipse中的命令行
【解决方案2】:

JVM 抛出 ArrayOutOfBoundsException 因为你的 args 是空的,这意味着你在运行这个程序时没有传递任何参数。尝试运行此命令:java Test005 45。顺便说一句,我认为您应该检查更多情况,例如:args[0] 不是数字格式(“ab”、“a1”)或 args 为空时。

【讨论】:

    【解决方案3】:

    你没有发现的大问题是

    Integer I = Integer.valueOf(args[0]);
    

    当且仅当:

    • args 数组至少包含一个元素

    • args[0] 是可以转换为 Integer 对象的东西

    在您的情况下,从未满足第一个条件,因此您试图获取空数组的第一个元素,然后出现异常

    您没有提到您是如何测试的,您是从另一个类/如何调用该方法,还是从终端/如何启动应用程序...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-17
      相关资源
      最近更新 更多