`
kingquake21
  • 浏览: 270512 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

理解String

 
阅读更多

Stringstr=”kvill;
Stringstr=newString(“kvill”);的区别:

Strings0=”kvill”;
Strings1
=”kvill”;
Strings2
=”kv”+“ill”;
System.out.println(s0
==s1); // 结果是 True
System.out.println(s0
==s2); // 结果也是 True

Java会确保一个字符串常量只有一个拷贝。
因为例子中的s0和s1中的”kvill”都是字符串常量,它们在编译期就被确定了,所以s0==s1为true;而”kv”和”ill”也都是字符串常量,当一个字符串由多个字符串常量连接而成时,它自己肯定也是字符串常量,所以 s2也同样在编译期就被解析为一个字符串常量,所以s2也是常量池中”kvill”的一个引用。
所以我们得出s0==s1==s2;

在JAVA language specification中的3.10.5 String Literals有相关说明:

the test program consisting of the compilation unit:

packagetestPackage;
classTest...{
publicstaticvoidmain(String[]args)...{
Stringhello
="Hello",lo="lo";
System.out.print((hello
=="Hello")+"");
System.out.print((Other.hello
==hello)+"");
System.out.print((other.Other.hello
==hello)+"");
System.out.print((hello
==("Hel"+"lo"))+"");
System.out.print((hello
==("Hel"+lo))+"");
System.out.println(hello
==("Hel"+lo).intern());
}

}

classOther...{staticStringhello="Hello";}
packageother;
publicclassOther...{staticStringhello="Hello";}

produces the output:

true true true true false true

This example illustrates six points:
• Literal strings within the same class in the same package represent
references to the same String object .
• Literal strings within different classes in the same package represent references
to the same String object.
• Literal strings within different classes in different packages likewise represent
references to the same String object.
• Strings computed by constant expressions are computed at compile
time and then treated as if they were literals.
• Strings computed by concatenation at run time are newly created and therefore
distinct.
The result of explicitly interning a computed string is the same string as any
pre-existing literal string with the same contents.

分享到:
评论

相关推荐

    计算机后端-Java-Java核心基础-第21章 常用类 06. 理解String的不可变性.avi

    计算机后端-Java-Java核心基础-第21章 常用类 06. 理解String的不可变性.avi

    理解C# String类型:特殊的引用类型

    C# String 类型:特殊的引用类型 C# String 类型是一个特殊的引用类型,它的实例是只读的。这意味着 String 类型的...最后,需要注意的是,在编程中,我们需要正确地理解 String 类型的特性,以免引发不必要的错误。

    对String的深入理解

    在深入理解String时,我们需要掌握以下几个关键知识点: 1. 引用变量与对象: 在Java中,变量分为基本类型变量和引用类型变量。引用变量(如String s)实际上是一个指向对象的句柄或引用,而非对象本身。当我们...

    C++实现string存取二进制数据的方法

    在C++编程中,STL(Standard Template Library)的string类是用于处理文本字符串的强大工具。然而,在处理二进制数据...同时,理解string类的内部工作原理以及其与二进制数据交互时可能出现的潜在问题,是非常重要的。

    String型的不可变性

    "String型的不可变性" Java 中的 String 型是一个特殊的包装类数据,它具有不可变性。什么是不可变性呢?...同时,理解 String 对象的创建过程和不可变性对于编写高效和可靠的 Java 程序非常重要。

    全面理解java中的String.doc

    6. **理解String的不可变性**:String对象一旦创建,其内容就不能改变。任何看似修改字符串的操作,如`substring`、`concat`或`replace`,都会创建新的String对象,而不会改变原对象。 7. **内存效率**:使用字符串...

    String容量大小区分

    因此,理解String的容量及其如何随操作而变化,对于编写高效、资源利用合理的代码至关重要。 ### Java中的String对象 #### 1. 字符串常量池 在Java中,当通过直接字面量方式定义字符串时,如`String s = "Hello";...

    深入理解JVM实战篇-String类1

    总的来说,理解String类和它的intern()方法对于优化内存使用和提高程序性能至关重要。通过合理使用这些机制,开发者可以避免不必要的对象创建,从而减少内存开销。在面试或实际开发中,掌握这些知识能够帮助我们编写...

    Java中的String池

    本篇文章将详细解释Java中的String池概念及其重要性,并通过一个示例代码深入理解String池的工作机制。 #### String池的基本概念 Java中的String池是一个特殊的数据结构,它存储了所有被程序引用的字符串字面量...

    String.xml转Excel翻译工具

    首先,我们需要理解String.xml文件的结构。在Android项目中,String.xml位于res/values目录下,它包含了应用程序中的所有文本字符串。每条字符串都由一个唯一的ID和对应的值组成,如: ```xml <string name="hello_...

    Stringboot空白项目示例及jar包

    总的来说,这个Stringboot空白项目示例是一个很好的起点,它帮助开发者快速理解Stringboot的运行机制和基本用法。通过运行和修改这个示例,你可以深入学习Stringboot框架,并将其应用到实际的项目开发中。

    信息抽取类StringParser说明文档

    通过阅读这个文件,开发者可以更深入地理解StringParser的功能,提升使用效率,更好地利用它来解决信息抽取问题。 总结,StringParser作为信息抽取工具,以其强大的字符串处理能力和HTML解析功能,为开发者提供了...

    String类型两种不同实例化方式

    通过上述分析,我们可以看到,理解String类型的两种实例化方式对于优化代码性能、避免常见错误具有重要意义。在日常编程中,合理选择字符串的实例化方法,将有助于构建更加高效、稳定的软件系统。

    Java中的String为什么是不可变的?-String源

    首先,理解String的不可变性需要知道其内部实现。String在Java中被实现为一个final类,这意味着它不能被继承。此外,它的构造函数创建了一个字符数组,并将其保存在名为value的私有final字段中。由于final关键字的...

    一文带你吃透Java中的String类.rar

    字符串常量池的概念是理解String类的关键。当创建一个字符串时,如果常量池中已经存在相同内容的字符串,那么新创建的字符串会直接引用已有的,这被称为字符串常量池的复用机制,有助于节省内存。 最后,关于Java的...

    String与StringBuffer区别详解

    首先我们来理解String。String类在Java中是不可变的,这意味着一旦一个String对象被创建,它包含的字符序列就不能被改变。当你看到类似text = text.replace('j','i');的代码时,实际上是在创建一个新的String对象,...

    字符串、String类和StringBuilder类

    总结一下,字符串是编程中基础且关键的数据类型,理解String类和StringBuilder类的特性及其应用场景至关重要。了解它们的差异和用法,有助于编写出更加高效、易维护的代码。在.NET框架中,String类提供了丰富的字符...

    Java中的String对象是不可变的吗Java开发Jav

    理解String对象的不可变性对于Java开发者来说至关重要,因为它影响着代码的编写、内存管理和多线程环境下的行为。 首先,不可变性意味着一旦一个String对象被创建,它的值就不能再被修改。例如: ```java String ...

Global site tag (gtag.js) - Google Analytics