首页 > 解决方案 > 为什么单字符和“单字符字符串”在转换为长 (.toLong()) 时不相等

问题描述

我想对Long变量的数字求和并将其添加到它自己的变量中,我带来了下一个工作代码:

private fun Long.sumDigits(): Long {
    var n = this
    this.toString().forEach { n += it.toString().toLong() }
    return n
}

用法:assert(48.toLong() == 42.toLong().sumDigits())

我必须使用it.toString()它才能让它工作,所以我进行了下一个测试,但我没有得到它的结果:

@Test
fun toLongEquality() {
    println("'4' as Long = " + '4'.toLong())
    println("\"4\" as Long = " + "4".toLong())
    println("\"42\" as Long = " + "42".toLong())

    assert('4'.toString().toLong() == 4.toLong())
}

输出:

'4' as Long = 52
"4" as Long = 4
"42" as Long = 42

使用它是一个好习惯char.toString().toLong()还是有更好的方法来char转换Long

"4"chars表示吗?为什么它不等于它的char表示?

标签: kotlintostringlong-integer

解决方案


从文档中:

class Char : Comparable (source) 表示 16 位 Unicode 字符。在 JVM 上,这种类型的不可为空的值表示为原始类型 char 的值。

有趣 toLong(): 长

以 Long 形式返回此字符的值。


当您使用时,'4' as Long您实际上会得到 char '4' 的 Unicode (ASCII) 代码


推荐阅读