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

Java 中的字符串初始化和串联

孙阳舒
2023-03-14

在我的应用程序中,一切正常,但我想提高性能并优化我的代码。

这两个哪个更适合

1.initialisation

String str1=new String("Hello");
String str2="Hello";

2.连接

System.out.println(s1 + s2);
System.out.println(new StringBuffer(S1).append(s2));

共有3个答案

别浩漫
2023-03-14

String str2="Hello";

用于字符串初始化,因为如果“Hello”字符串在JVM字符串池中可用,则不会创建新的内存对象

另外两个建议:

  1. 如果您正在处理字符串,请使用StringBuffer,因为它不会像stringclass那样在每次处理字符串时创建新字符串
  2. 如果您的应用程序是线程安全的,请使用<code>StringBuilder</code>来避免为多线程操作设计的StringBuffer不必要的开销
东方俊杰
2023-03-14

对于初始化,第二种方法更好:

String str2="Hello";

因为通过这种方式,您可以使用 Java 字符串池并避免不必要的分配。

对于连接,当您必须执行大量字符串连接时,第二种方法是最好的选择,如果只连接两个字符串,第一种方法更简单,也足够。。。

慕容嘉荣
2023-03-14

首先,不要提高性能和优化代码,除非您首先分析了您的应用程序,并意识到有一个非常好的理由这样做。

其次,对于String变量的初始化,最好不要使用String构造函数。使用常量字符串(就像str2所做的那样),Java可以将String对象从String池中提取出来。

第三,不要使用StringBuffer进行串联。请改用StringBuilder。StringBuffer的方法是同步的,这会显著降低应用程序的速度。事实上,这两种连接几乎是相同的,因为所有现代编译器都创建字节码,使用StringBuilder来表示类似“s1 s2”的表达式。

 类似资料:
  • 问题内容: 我知道对于上面的第3个初始化,字符串对象在字符串池中初始化,而第4个与字符串池无关。 1.和2有 什么区别?如果我将其视为指针变量,它存储的是特定内存地址,而该内存地址从未被JVM或OS使用? 4.和5 之间有区别吗? 当我打印和通过直接和,对,我甚至无法通过compilation.For ,编译OK,我得到“空”,并在控制台窗口中的输出。为什么? @aioobe的答案后编辑:更多问题

  • 问题内容: 显然,javac中初始化字符串的大小受到限制。谁能帮助我确定最大限额? 谢谢 编辑: 我们正在构建一个初始化字符串,看起来像这样的“ {1,2,3,4,5,6,7,8 ......}”,但理想情况下应包含10,000个数字。当我们为1000执行此操作时,10,000会引发错误,提示代码对于try语句而言太大。 为了产生这种效果,我们使用了一个stringbuilder并在附加值的数组上

  • 问题内容: 如果String和其他字符串一样是一个类,如何使用双引号将其初始化? 问题答案: Java的设计者决定保留面向对象语言中的原始类型,而不是将所有内容都变成对象,以提高语言的性能。原语存储在调用堆栈中,这需要较少的存储空间,并且操作成本较低。另一方面,对象存储在程序堆中,这需要复杂的内存管理和更多的存储空间。 出于性能原因,Java的String设计为介于基本体和类之间。 例如 注意:

  • 同一类型的扫描仪方法在一个地方工作,但在另一个地方不工作。。。如果这改变了任何答案,我将使用eclipse作为我的代码编辑器。如果不是在这里,所有变量都已在别处声明。 如果有人知道如何解决这个问题,我将永远感激你:) 这一个正在工作: 这个不起作用: 错误消息:

  • 考虑以下初始化: 在g 5.2.0中,编译器对falseString发出警告,而对trueString发出错误。 使用clang 3.6-std=c 11时,编译器会对假字符串和真字符串抛出错误。 Q1)为什么的行为不同,即使两个初始化值是相同的类型()? Q2)哪个编译器是正确的,为什么?标准怎么说? 编辑: 错误:从“bool”到“std::string”(又名“basic\u string”

  • 如果String和其他类一样,那么如何使用双引号初始化它?