在不使用不安全转换的情况下从整数转换为字符

Cast from Integer to Character without using unsafe conversion

我必须编写一个方法,该方法具有一个 Integer 类型的参数并且必须 return 一个 Character 类型的对象。 如果给定参数的值可以呈现为 Character 对象, Return 它作为一个角色。否则 return null.

我的任务表述不当,它说:“您的代码中不允许进行不安全的转换(例如,从 int 到 char)”我想这不是不安全的,但也以某种方式不允许?

到目前为止我的代码:

public Character methodName (Integer i) {

        if (i >= 0 && i <= Character.MAX_VALUE) {
            return Character.valueOf((char) i.intValue());   //unsafe conversion
        }
        else
            return null;
    }

我尝试以任何方式修复它,但无法想出不使用不安全转换的解决方案,非常感谢您的帮助!

这个奇怪的公式化任务的解决方案:

public Character methodName (Integer i) {

        if (i >= 0 && i <= Character.MAX_VALUE) {
            return (Character.toChars(i)[0]); //<- solution
        }
        else
            return null;
    } 

您的转换在这里是安全的。

  • 您正在检查 int 是否在字符范围内
  • 然后你使用内置方法进行转换

可能还有另一种方法,但它更加棘手和奇怪:

String iStr = Integer.toString(i.intValue())
char c = iStr.charAt(0)
Character crt = Character.valueOf(c)

我再说一遍,但你的方法非常好......我不明白你的老师对你有什么期望。

在我看来

  if (i >= 0 && i <= Character.MAX_VALUE) {
       return Character.valueOf((char) i.intValue());
  }

根据老师对“安全”的定义,完全安全。

SO my teacher said it is indeed unsafe, because the value range of int is 2^32 and of char is 2^16.

if 测试可确保您仅在 i 处于所需(安全)范围内时将 i.intValue() 转换为 char

不利的一面是,如果 可证明正确的 范围检查不足以使这个对你的老师足够“安全”,那么 AFAIK 就没有“安全”的解决方案.所有其他不太直接的解决方案也需要以某种形式进行显式或隐式范围检查......因此 是“不安全的”。