java – 更新String的有效方法是什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 更新String的有效方法是什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3518字,纯文字阅读大概需要6分钟。
内容图文
![java – 更新String的有效方法是什么?](/upload/InfoBanner/zyjiaocheng/810/3110098318e04dcaa6ad45a940313eee.jpg)
假设我需要启动一个String,然后将其更新几次,就像在这个伪代码中一样:
String s = "first";
if (<some condition>) { s += "second"; }
if (<some condition>) { s += "third"; }
if (<some condition>) { s += "fourth"; }
如果我最多有4次,那么以这种方式使用它还是只使用StringBuffer / StringBuilder更好?
实际上我要问的是,在哪种情况下,字符串(这是一种可变类型)的更新时间是使用上述选项的有效方式?
解决方法:
首先,String不是一个可变类.每次使用=时,都会返回另一个对象.
其次,除非你在紧密循环中使用它,否则它无论如何都不是很重要.
第三,虽然它可能不是类似计算机科学的方法,但如果我尝试使用的话
StringBuilder s = new StringBuilder("first");
s.append( "second" );
s.append( "third" );
s.append( "fourth" );
Intellij建议用String替换它,并且只有在使用简单的String时至少同样有效才会出现该建议(尽管由于条件可能不完全相同)
根据Java: String concat vs StringBuilder – optimised, so what should I do?
Java编译器确实用String构建器替换了一系列String连接:
public static void main(String[] args) {
String s = "first";
s+=" second" ;
if(args.length >0)
s+=" third";
System.out.println("s, = " + s);
}
使用JDK 1.8.0_66并使用javap -c SbTest.class生成以下输出.虽然我不是字节代码的专家,但似乎创建了多个StringBuilder实例(3,28).因此,在链接的答案中建议,编译的代码似乎是这样的:
String s = "first";
s = new StringBuilder().append(s).append(" second") ;
if(args.length >0)
s = new StringBuilder().append(s).append(" third") ;
因此,除非JIT正在优化它,否则自己使用StringBuilder可能仍然更有效.
public static void main(java.lang.String[]);
Code:
0: ldc #2 // String first
2: astore_1
3: new #3 // class java/lang/StringBuilder
6: dup
7: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V
10: aload_1
11: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
14: ldc #6 // String second
16: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
19: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
22: astore_1
23: aload_0
24: arraylength
25: ifle 48
28: new #3 // class java/lang/StringBuilder
31: dup
32: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V
35: aload_1
36: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
39: ldc #8 // String third
41: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
44: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
47: astore_1
48: getstatic #9 // Field java/lang/System.out:Ljava/io/PrintStream;
51: new #3 // class java/lang/StringBuilder
54: dup
55: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V
58: ldc #10 // String s, =
60: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
63: aload_1
64: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
67: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
70: invokevirtual #11 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
73: return
内容总结
以上是互联网集市为您收集整理的java – 更新String的有效方法是什么?全部内容,希望文章能够帮你解决java – 更新String的有效方法是什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。