java - 这行代码在java中是如何执行的?

标签 java

我正在尝试将字符与 ascii 值进行比较,因为我正在使用下面的代码。它工作正常,但我有一个疑问。下面的行是如何执行的。 我没有将 s.charAt(i) 转换为 int,而是如何将其与 ascii 值进行比较。

代码1:

if(s.charAt(i)>='a' && s.charAt(i)<='z'){
}

代码2:

if((int)s.charAt(i)>='a' && (int)s.charAt(i)<='z'){
}

上面两个代码的工作原理相同。我需要知道 code1 和 code2 之间的区别。任何人都可以帮助我了解这一点吗?

最佳答案

比较运算符适用于数值操作数,或者更具体地说,适用于可转换为数值操作数的操作数 ( JLS 15.20.1 )。因此,即使在“code 1”示例中,四个字符(两个来自 s.charAt(i),以及两个文字)也会自动提升为 int 以进行比较。

比较的第一步是使用“二进制数值转换”使两个操作数具有相同类型( JLS 5.6.2 )。基本上,它们被加宽到可以容纳这两种类型的最窄类型,在 char 的情况下是 int。一旦完成,这只是一个简单的、带符号的比较。

关于java - 这行代码在java中是如何执行的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34916727/

相关文章:

java - 使用 java8 流将 Map<Integer, List<Integer>> 转换为 List<Integer>

java - 如何使用 smartsheet api 移动工作表

java - 如何重构代码以避免 Java 循环中出现标签?

java - 如何防止多次安排 cron 任务

java - Struts2 中的有状态 session bean

java - 在不使用任何没有循环的库的情况下检查给定的字符串是否为回文

java - 正常关闭 Grizzly 服务器的正确方法是什么? (嵌入 Jersey )

java.lang.ExceptionInInitializerError 与 gradle

java - Vaadin ComboBox 选择以前的值而不是空值

java - 如何跳过所有集成测试 (-DskipITs) 和一个单元测试 mvn 命令行