首页 > 解决方案 > 代码示例:与 .equals(args[0]) 进行字符串比较

问题描述

我正在借助一本书学习 Java,但不理解以下示例/语句:

因为args[0].equals("Schrödinger")您需要确保args[0]不为空,"Schrödinger".equals(args[0])而不需要这种检查,因为"Schrödinger"不能为空。

代码:

if("Schrödinger".equals(args[0])) {
    System.out.println("Hallo");
}

但是,如果 in 中没有参数,我确实会收到错误args,这似乎也是合乎逻辑的,因为您需要args[0]在某个点获取值进行比较,即使字符串"Schrödinger"不为空。我很困惑,书中的例子是错误的还是我不明白?

标签: java

解决方案


书中提供的代码只处理args[0]存在null,没有args长度0。假设您的程序应该向它传递一些命令行参数,并且您在执行它时不传递任何参数,则以下数组的长度args将保持不变0

public static void main(String[] args)

因此,尝试从索引指定的第一个位置访问元素0将导致ArrayIndexOutOfBoundsException. 由于数组的索引以 开头0,因此最大索引可以达到数组减去的大小1

您可以通过在访问最大索引内的元素之前先检查数组的大小来避免遇到的问题,例如

if(args.length >= 1 && "Schrödinger".equals(args[0])) {
   //...
}

同样,如果要访问索引上方的元素1,则应检查大小是否为2或更大,例如

if(args.length >= 2 && "Schrödinger".equals(args[1])) {
   //...
}

顺便说一句,像这样的条件"Schrödinger".equals(args[0])被称为尤达条件


推荐阅读