当前位置: 首页 > 知识库问答 >
问题:

Character.isDigit在条件运算符[重复]中返回不同的结果

百里阳平
2023-03-14

代码1返回1。

代码 2 返回 49。

他们不应该返回相同的结果吗?

public class MyClass {
    public static void main(String args[]) {
        String code = "1";
        StringBuilder digitSB = new StringBuilder();
        for(int i = 0; i < code.length(); i++){
            char chr = code.charAt(i);
            //Code 1
            if(Character.isDigit(chr)){
                digitSB.append(chr);
            }
            else{
                digitSB.append(Character.getNumericValue(chr));
            }
            System.out.println("Code 1 result: " + digitSB);
            //Code 2
            digitSB = new StringBuilder();
            digitSB.append(Character.isDigit(chr) ? chr : Character.getNumericValue(chr));
            System.out.println("Code 2 result: " + digitSB);
        }
    }
}

请注意,49是1的ASCII码。

编辑:就像@matt在评论里说的那样。使用三元运算符时,“:”的两边被视为同一类型。由于getNumericValue假设它是一个int,两边都是int。条件为真,所以取左边,是chr,但认为是int。

共有1个答案

杭昊空
2023-03-14

在三元运算符的情况下,返回类型被视为int。像这样使用

Character.isDigit(chr) ? chr : ""+ Character.getNumericValue(chr);

Character.isDigit(chr) ? ""+chr :  Character.getNumericValue(chr);

 类似资料:
  • 问题内容: 尝试执行以下操作: 我收到此错误: 无法确定条件表达式的类型,因为“ System.DBNull”和“ System.DateTime”之间没有隐式转换 我显然理解该错误,但是考虑到Parameters.Value是object类型,为什么类型甚至很重要?有没有办法完成我想做的事情? 问题答案: 返回值进入的值并没有什么区别,因为 必须首先确定返回值的类型 。 这两个值(投一个,)其他

  • 相当新的反应,我相信这很容易,但我正在尝试转换: 转换成单个返回语句。 基本上是替换

  • 我试过: 如果条件行出现以下错误: 也有类似的问题,但我的错误是“如果”条件。我如何用“bc”或“dc”来修复它?

  • 问题内容: 我有一个由以下映射的关联: 我想使用Criteria API返回所有包含一个或多个带有attribute实体的实体的列表。我不希望映射集合被查询过滤。 例如,给出以下内容: 该查询应返回以下内容: 到目前为止,我正在使用以下条件查询: 然而,它返回的等价于 即,它为每个子元素返回一个父记录(填充了子集合) 有谁知道在这种情况下如何仅返回唯一的父元素? 意见表示赞赏,p。 问题答案: 您

  • 我正在开发一个返回算术表达式的程序,其中包括运算符和整数。我为其实现的代码如下: 这段代码的问题是它返回运算符,但表达式中的所有运算符都是相同的:例如:我得到一个表达式9 2 3 4 5=?我不想让它全部包含,它可以是一个表达式中的许多随机运算符。任何帮助都将不胜感激。谢谢

  • 问题内容: 我对条件运算符有些疑惑。考虑以下两行: 为什么f1变为null且第二条语句引发NullPointerException? Langspec-3.0第15.25段说: 否则,第二和第三操作数分别为S1和S2类型。令T1为对S1进行装箱转换所产生的类型,而T2为对S2进行装箱转换所产生的类型。条件表达式的类型是将捕获转换(§5.1.10)应用于lub(T1,T2)(§15.12.2.7)的