`

why string concatenation yields no interned one

阅读更多
public class Test {
	public static void main(String[] args) {
		String a = "tes";
		String b = a + "t";
		String c = new String("test");
		System.out.println(a.intern() == a); //true
		System.out.println(b.intern() == b); //false
		System.out.println(b.intern() == c.intern()); //true
	}
}

 

操作符+用于字符串时进行了重载,基本可以推测是借用了String的concat方法

 

public String concat(String str) {
    int otherLen = str.length();
    if (otherLen == 0) {
        return this;
    }
		
    char buf[] = new char[count + otherLen];
    getChars(0, count, buf, 0);
    str.getChars(0, otherLen, buf, count);
    return new String(0, count + otherLen, buf);
}

 

该方法就是返回堆中新生成对象的,而不是the interned one

从定义上讲:
String a = "tes";
String b = a + "t";

a是literal,而b就不是literal,也不是string valued constant expression,因为a不是constant
详见:jls §3.10.5:http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#101083

 

再通过这个验证:

String b = "tes" + "t";
System.out.println(b.intern() == b);

结果为true,ci是string值的常量表达式(string-valued constant expression),属于例外吧。

 

The following are examples of string literals:

""				// the empty string
"\""				// a string containing " alone
"This is a string"		// a string containing 16 characters
"This is a " +		// actually a string-valued constant expression,
	"two-line string"	// formed from two string literals
	

 

All literal strings and string-valued constant expressions are interned.

分享到:
评论

相关推荐

    Arduino项目开发 Strings_StringAdditionOperator_StringAdditionOperato

    2. **字符串初始化**:在代码中,我们看到`String`对象`stringOne`、`stringTwo`和`stringThree`的声明。`stringOne`、`stringTwo`被赋值为特定的字符串,而`stringThree`则为空字符串。 3. **字符串连接操作**:...

    Concatenation层1

    在深度学习领域,`Concatenation`层是一个非常常见的操作,用于将多个输入张量沿着一个特定轴合并成一个新的张量。在TensorRT这个高性能深度学习推理库中,我们可以使用`add_concatenation`方法来实现这个功能。下面...

    数据结构学习——我的string类

    6. **字符串操作**:包括连接(concatenation)、比较、查找子串、替换子串等功能。 描述中提到的"String类模拟示例_teacher"和"string类的模拟__实习一"可能包含了教师的示例代码和学生的实践作业。通过这些文件,...

    区分java中String+String和String+char

    在给出的例子中,创建一个名为`StringOne`的类,并在主方法中使用`"abc" + '/'`和`"abc" + "/"`,然后通过`javap -v -l StringOne.class`命令查看字节码。你会发现,无论是`'/'`还是`"/"`,编译器都将它们视为字面量...

    C#string和stringbuilder的比较及计时器的实现

    Console.WriteLine($"String concatenation took: {stopwatch.ElapsedMilliseconds} ms"); // 使用StringBuilder进行拼接 stopwatch.Restart(); StringBuilder sbResult = new StringBuilder(); for (int i = ...

    10个Java经典的String面试题!.zip

    每次对String进行修改(如concatenation或replace操作),都会生成新的String对象。 3. **String对象的比较** - 使用`==`比较的是两个对象的引用,只有当引用指向同一块内存空间时才返回true。 - `equals()`方法...

    WindowsFormsApp1_stringc#_

    - **连接(Concatenation)**:我们可以使用`+`运算符或`String.Concat()`方法将多个字符串合并。 - **格式化(Formatting)**:`String.Format()`方法允许我们插入变量到一个字符串模板中,如`String.Format(...

    unicode_string_src.zip_CUnicodeString pudn_UnicodeString.cpp_uni

    它可能包含构造函数、赋值操作、比较操作、连接(concatenation)、查找、替换等方法,以方便对宽字符(wchar_t)数组进行操作。 4. **UnicodeString.cpp**:这个文件包含了CUnicodeString类的实现代码。它会定义类...

    concatenation操作什么?

    有一次在看论文的时候(Multi-Range Attentive Bicomponent Graph Convolutional Network for Traffic Forecasting),在公式里遇到concatenation operation,不知道是什么,大致的意思应该是把向量中对应位置加起来...

    编写一个String类 代码

    在Java编程语言中,String是一个非常基础且重要的类,它被广泛用于处理文本字符串。由于String类在Java标准库中已经内置,但为了学习和理解面向对象编程的概念,以及String类的工作原理,我们经常会尝试自己编写一个...

    C标准库STLstring类PPT课件.pptx

    C++标准库中的`std::string`类是处理文本数据的核心工具之一,它是C++模板类`basic_string`的一个别名,专门用于处理字符序列。这个类提供了丰富的功能,使得对字符串的操作更加方便和高效。以下是对`std::string`类...

    Cplusplus_string_Operation.rar_operation

    在C++编程语言中,字符串(string)是一个重要的数据类型,用于存储和处理文本信息。本文将深入探讨C++中的字符串操作,包括基本概念、常用函数以及如何通过实例理解其功能。 C++中的字符串通常有两种表示方式:...

    自己编写的string的库函数

    3. **字符串操作**:包括字符串的拼接(concatenation)、截取(substring)、查找(find)、替换(replace)等。这些操作需要高效的数据结构和算法支持,例如双指针法、二分查找等。 4. **比较操作**:实现字符串...

    vital-string-interpolation:vim 的字符串插值库

    'concatenation'并满足'beautiful ${string} interpolation' :beating_heart: 安装 1. 使用您最喜欢的插件管理器安装vital.vim 和vital-string-interpolation。 生命力.vim: : NeoBundle ' vim-jp/vital.vim ' ...

    UDP-client-server.rar_The First_row socket

    Editor to work with two strings (string concatenation, for equality of strings for equality lengths, insert the second row in a predetermined position of the first) Server application retrieves data...

    CharString类库

    CharString类库是一种高效、强大的工具,专门设计用于处理字符和字符串操作,具有显著的跨平台能力。在软件开发中,字符串处理是不可或缺的一部分,尤其是在处理文本数据、用户输入、文件内容等方面。CharString类库...

    java7源码-prictice2:第二次课程

    Concatenation? 字符串的拼接是日常开发中非常常用的业务,字符串的连接分为简单的+,StringBuilder拼接等,当有大量字符串需要进行拼接时,需要处理好拼接方式,能够大幅度提升程序的性能 stringbuilder:如果能够...

    MLDN魔乐JAVA_07作业讲解、String.rar

    【标题】"MLDN魔乐JAVA_07作业讲解、String.rar" 提供的是一份关于Java编程语言中String类的教程资料,主要涵盖了作业解析和相关知识点的深入讲解。在Java中,String是一个非常重要的类,它用于处理文本字符串,并在...

    java入门资料(String,接口和抽象类,泛型,io流,反射,多线程)

    String 提供了多种方法来操作字符串,例如 concatenation、substring、indexOf、equals 等。 接口和抽象类 接口和抽象类是 Java 中的两种基本设计模式,用于定义类的行为和结构。接口定义了一组方法的声明,抽象类...

Global site tag (gtag.js) - Google Analytics