问题很简单:这2个版本之间有什么区别(都初始化了var name: String
和val thingInt: Int
)?
name=“$someInt”
name=“$name$someInt”
我还了解到字符串插值使用StringBuilder,因此第二个代码应该优先于第一个代码(使用串联)?
语义学是等价的,第二个可能稍微更有效,但并不完全是因为你给出的原因:只有一个连接而不是两个。(第一个首先生成""某个Int
,然后生成name("某个Int)
。)
找到差异的最佳方法是查看生成的字节码(我将使用Kotlin 1.4.10)。
为以下对象生成的字节码:
ALOAD 0
NEW java/lang/StringBuilder
DUP
INVOKESPECIAL java/lang/StringBuilder.<init> ()V
SWAP
INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
BIPUSH 32
INVOKEVIRTUAL java/lang/StringBuilder.append (C)Ljava/lang/StringBuilder;
ILOAD 1
INVOKEVIRTUAL java/lang/StringBuilder.append (I)Ljava/lang/StringBuilder;
INVOKEVIRTUAL java/lang/StringBuilder.toString ()Ljava/lang/String;
ASTORE 0
为以下对象生成的字节码:
NEW java/lang/StringBuilder
DUP
INVOKESPECIAL java/lang/StringBuilder.<init> ()V
ALOAD 0
INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
BIPUSH 32
INVOKEVIRTUAL java/lang/StringBuilder.append (C)Ljava/lang/StringBuilder;
ILOAD 1
INVOKEVIRTUAL java/lang/StringBuilder.append (I)Ljava/lang/StringBuilder;
INVOKEVIRTUAL java/lang/StringBuilder.toString ()Ljava/lang/String;
ASTORE 0
结果几乎相同,但在第一种情况下有一个额外的SWAP
操作,导致第一个append
操作的参数过早加载到堆栈上(在StringBuilder
创建之前,现在需要交换它们)。
太长别读
结果表明:
名称),空白
问题内容: String s1 = “andrei”; String s2 = “andrei”; 提供以下代码,为什么第二个比较s2 == s3为true?s2.toString()返回的实际上是什么?实际位于哪里? 问题答案: 首先是无操作: 其次,对String常量进行了插值,因此s1和s2在幕后被更改为相同的String实例。
问题内容: String[] letters = {“A”, “B”, “C”, “D”, “E”, “F”, “G”, “H”, “I”, “L”}; 为什么是 Fk呀! 输入AL字母之一绝对不会发生? 问题答案: 字符串是对象。所述通过引用,而不是由它们的内部值进行比较的对象。 有两种解决方案: 使用method来比较两个对象的值。 使用代替。这是原始的,因此可以使用。
问题内容: 我试图理解字符串比较与字符串比较的输出。需要明确的是,我拥有使用==和equals比较两个字符串的类。我试图将==和equals()的输出合并为字符串。equals()的输出会连续显示,但==的输出不会 连续显示。使用Java的装箱功能,将与字符串连接的布尔值联系起来。equals和==都返回布尔值。那么为什么会有这种差异呢?有人可以解释吗? 输出 更新:答案 如果不使用s1 == s
本文向大家介绍groovy 双引号字符串(插值),包括了groovy 双引号字符串(插值)的使用技巧和注意事项,需要的朋友参考一下 示例 默认情况下会急切解析该参数,这意味着适用: 为了在每次使用字符串时延迟加载参数,可以这样做:
问题 你想创建一个字符串,让它包含体现某个 CoffeeScript 变量的文本。 解决方案 使用 CoffeeScript 中类似 Ruby 的字符串插值,而不是 JavaScript 的字符串拼接。 插值: muppet = "Beeker" favorite = "My favorite muppet is #{muppet}!" # => "My favorite muppet is B
问题内容: 可能是我正在分裂头发,但我想知道以下情况: 最好使用哪个? 我最好的意思是 任何方式 。 阅读这些内容后,其他帖子说案例3并不是最佳性能,其他案例1会以案例3结束,依此类推。 更具体。 例如,搁置一旁,如果必须维护他的代码,哪种风格更适合从其他程序员那里看到呢? 还是您认为哪种编程更有效? 否则您会认为速度更快等。 我不知道该如何表达。 像案例3这样的答案可能会更快,但是绝大多数程序员