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

多么不同的StringBuilder和StringBuilder!在科特林?[副本]

公西毅
2023-03-14

在下面的代码中。我在Intellij idea编译器中发现val a和val b默认为"val a: StringBuilder"

这两者的区别是什么?StringBuilderStringBuilder有什么区别 ?谢谢:)

fun main(){
    val a = StringBuilder().apply { // by default is val a : StringBuilder
        append("Hello ")
        append("from me")
    }
    println(a)

    val b = StringBuilder().run { // by default is val b : StringBuilder!
        append("Hello ")
        append("from me")
    }
    println(b)
}

共有1个答案

闻人和泽
2023-03-14
匿名用户

<代码>!表示平台类型。这意味着编译器不能区分类型是否为空,因为它来自Java(或另一种JVM语言),它没有区分可为空和不可为空的类型,也没有注释(@Nullable@NonNull)来指示。

因此,编译器将无法进行通常的空检查,因此您应该小心。

如果您知道(从文档中,或者查看Java代码,或者其他)该值是否可以为null,那么最好显式指定该类型(可以使用尾随的为null,也可以不使用尾随的为非null)。

在本例中,区别在于apply()返回调用它的值;这就是Kotlin,所以编译器知道它的类型。但是,run()返回lambda中的最后一个值,这是最后一次append()调用的结果。该方法是在Java中定义的(因为StringBuilder是Java标准库的一部分),因此编译器无法判断它是否可为null。但从文档中可以清楚地看到,该方法只返回调用它的StringBuilder,因此不能为null。因此,为了安全起见,您可以为b指定显式StringBuilder类型(即不可为空)。

 类似资料:
  • 公共类TestMyStringBuilderII{ } sb3=new StringBuilder(null)将导致NullPointerException。现在,StringBuilder()、StringBuilder(“”)和StringBuilder(null)之间有什么区别? 我不确定这个问题的表述是否正确,但如果有人能理解我在这里的想法/困惑,并澄清一下这些,我将非常感激。

  • 我读过使用“!!”而不是“?。“在kotlin中不推荐。检查变量中的null时,2有什么区别?

  • 问题内容: 请告诉我一个实时的情况来比较String,StringBuffer和StringBuilder? 问题答案: 如果使用的是JGraph,则应尝试为算法设计的。它的功能之一是使用库进行可视化。它仍然开发,但相当稳定。我前段时间分析了算法的复杂性。其中一些并不是最快的,但是如果你要自己实现它们并需要显示图形,那么它可能是最佳选择。我真的很喜欢使用它的API,当时我不得不快速编写一个在图形上

  • 主要内容:1 Java.lang StringBuilder介绍,2  Java.lang StringBuilder声明,3  Java.lang StringBuilder方法,4  Java.lang StringBuilder案例1,5  Java.lang StringBuilder案例21 Java.lang StringBuilder介绍 java.lang.StringBuilder类是可变的字符序列。 这提供了与StringBuffer兼容的API,但不保证同步。 2  Jav

  • 上一节,我们学习了 Java 的 String 类,并介绍了其常用方法。本小节我们来介绍字符串的另外一个类:StringBuilder,我们将会了解到 StringBuilder 与 String 的差异,StringBuilder 的使用场景,也会介绍与 StringBuilder 类对应的 StringBuffer 类,StringBuilder 的使用方法以及其常用方法是本小节的重点学习内容