在下面的代码中。我在Intellij idea编译器中发现val a和val b默认为"val a: StringBuilder"
这两者的区别是什么?StringBuilder
和StringBuilder有什么区别
?谢谢:)
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)
}
<代码>!表示平台类型。这意味着编译器不能区分类型是否为空,因为它来自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 的使用方法以及其常用方法是本小节的重点学习内容