java - 代码示例:与 .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"
不为空。我很困惑,书中的例子是错误的还是我不明白?
解决方案
书中提供的代码只处理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])
被称为尤达条件。
推荐阅读
- bash - PostgreSQL:从脚本执行查询
- fortran - HDF5时域仿真结果
- azure - 我使用什么帐户将桌面远程连接到 Azure 上的 VM?
- javascript - 我可以将 HTML 元素合并到对象吗?
- angular - 带有可拖动元素的 Angular sidenav,在拖动时位于 mat-sidenav-content 下方
- python - 节点之间的循环关系 A>B>C>A
- spring - 如何在 Spring Security 和 thyemeleaf 中处理用户权限
- arrays - VBA 向量输出返回 0
- powershell - 使用 txt 文件支持搜索和替换文件和文件夹名称
- arrays - awk 程序检查每一行是否有'0'