困惑关于整数和字符类型

时间:2017-01-30 18:33:44

标签: java

有这样的代码:

boolean isValid(int ch) {
  if(ch < '1' | ch > '7' & ch != 'q') return false;
  else return true;
}


class HelpClassDemo {
...

  do {
    choice=(char) System.in.read();
  } while(!hlpobj.isValid(choice));
}

这是个问题: 尽管选择类型为int ch,我们在isValid(int ch)使用char的原因是什么?

我们不应该使用char ch吗?如果我们应该使用int ch,为什么会有这样的代码:(ch < '1' | ch > '7' & ch != 'q')

ch<1ch>7不符合逻辑吗?我知道这是一个非常简单的问题,但我对此感到困惑。

1 个答案:

答案 0 :(得分:1)

int类型的范围比char类型更宽(请参阅this数据类型范围表)。 IMO,接收一个字符作为int提供了某种溢出保护(欢迎对此观点),但这不是我要做的事情,因为我使用了正确的数据类型。

现在,比较时

if(ch < '1' | ch > '7' & ch != 'q') return false;

你隐式地将'1'和'7'转换为int类型,这是完全有效的。

最后,关于

  

ch&lt; 1或ch&gt; 7不合逻辑吗?我知道这是一个非常简单的问题但是   我对此感到困惑。

这是合乎逻辑的,但它不一样。

如果你执行ch > '1' && ch < '7',则将ch与ASCII值7(即55)和值1(即48)进行比较。基本上,您确定ch是一个2到6之间的字符,包括两个字符。

但是如果你做ch > 1 && ch < 7,你要比较整数并验证ch表示的字符是2到6之间(包括两者)。这个字符很可能不是人类可读的。

如果你想让它们等效,你必须根据适当​​的char值进行比较,比如

if (ch > 48 && ch < 55)