String s1 = "a";
String s2 = s1 + "b";
String s3 = "a" + "b";
System.out.println(s3 == s2); //打印FALSE
说明s3和s2指向不同的字符串对吗,不是说常量池中的字符串不会重复创建吗,就是说"ab"应该好像只有一份,这里不是重复创建了吗 ?
放在常量池中的都是编译期间就确定的,比如你这里面的s1和s3,但是对于s2来说,是不能再编译时确定其值的,因为s1是一个变量。只能在运行的时候才可以,所以s2会被分配到一个堆里,这样就有两份"ab",一个在常量池里,一个在堆里。如果你想最后打印的是true的话,你可以把s1声明为final类型的,这样s2在编译的时候就能确定其值了,这样常量池中就有一个"ab".
分享到:
相关推荐
【Java面试题】对String常量池的理解
Java String 源码和 String 常量池的全面解析 Java String 源码和 String 常量池是 Java 语言中非常重要的两个概念,它们之间存在着紧密的联系。在 Java 语言中,String 类是不可变的,finalize 方法被禁用,以确保...
字符串常量池的设计思想是为了解决字符串的频繁创建问题,减少内存开销和提高性能。 在Java中,字符串是不可变的,可以共享运行时实例创建的全局字符串常量池中。字符串常量池维护一个引用表,每个唯一的字符串对象...
在Java编程语言中,`String`对象的创建是开发者经常遇到的问题,因为它涉及到内存管理和效率。`String`类在Java中被广泛使用,因为它代表不可变的字符序列,这使得它在很多场景下非常安全。这里我们将深入探讨`...
Java String 字符串常量池解析 Java 中的字符串常量池是一种为了提高性能和减少内存开销的机制。它是 JVM 实例化字符串常量时进行的一些优化,主要是为了减少字符串对象的创建和存储。 字符串常量池的设计思想是...
这个类有一些特殊特性,包括常量池(String Pool)和两个常用的比较方法:`equals()`和`==`。理解这些概念对于编写高效、无错误的Java代码至关重要。 首先,`String`类的常量池是在内存中的一个区域,用于存储字符...
### String中的常见问题 在Java编程语言中,`String` 类型是最常用的数据类型之一,它代表了不可变的字符序列。本文将基于提供的代码片段深入探讨与 `String` 类型相关的几个关键概念,包括字符串常量池、字符串...
### Java String对象的经典问题 #### 一、String 类与对象机制概述 在Java中,`String`类是一个非常重要的类,它提供了丰富的功能用于处理文本数据。`String`类是不可变的(immutable),这意味着一旦一个`String`...
//在java中有一个常量池,当创建String 类型的引用变量给它赋值时,java会到它的常量池中找"hello world"是不是在常量池中已存在。如果已经存在则返回这个常量池中的"hello world"的地址(在java中叫引用)给变量a 。...
### String类创建对象问题 #### 一、String 类与常量池、字符串池的基本概念 在 Java 中,`String` 类并不属于八种基本数据类型之一,而是作为一个对象存在。这意味着 `String` 对象默认值为 `null`。尽管如此,`...
**StringTable(字符串常量池)详解** 在Java编程语言中,`StringTable`是一个重要的概念,它涉及到字符串对象的创建、存储以及内存管理。理解`StringTable`的工作原理对于优化程序性能和节省内存资源至关重要。 #...
VB支持多种数据类型,如Integer、Double、String等,常量的数据类型与所赋的值相匹配。如果未指定数据类型,VB会根据值自动推断。 三、常量的作用域 常量的声明可以放在过程内部或外部。如果在模块级别(即不在任何...
此外,还可以用字符串(String)作为常量,但此时需要注意字符串常量需要使用双引号括起来,例如: ```delphi const Greeting: String = 'Hello, World!'; ``` 在Delphi7中,常量也可以用于枚举类型(Enumeration...
这种方式创建的`String`对象会存储在常量池中,因为它们是编译时常量。 2. **构造函数创建**: `String`类提供了多个构造函数,允许我们通过字符数组或另一个`String`对象来创建新对象。例如: ```java char[] ...
实际上创建了两个 String 对象,一个是”abc”对象,存储在常量空间中,一个是使用 new 关键字为对象 s 申请的空间。 二、字符串的常见操作 字符串的常见操作包括 charAt 方法、compareTo 方法、concat 方法等。 ...
#### 四、关于String常量池 **4.1 intern()方法** 对于通过直接赋值创建的字符串,如`String s = "hello"`,这个字符串会被自动存储在常量池中。而通过`new`创建的字符串则不会自动存入常量池。但是,可以使用`...
微信平台中所有的接受信息,发送信息,按钮菜单等POJO对象,还有用到的常量。 下面是个抽象出来的Message父类,下面还有ImageRequestMessage等子类 @XmlRootElement(name = "xml") @XmlAccessorType(XmlAccessType....
- String对象在Java中是通过引用常量池中的常量来创建的,一旦创建就不能改变。例如,`String str = "Hello"` 创建了一个字符串对象。 - 因为不可变性,每次对字符串进行修改(如使用`concat()`或`substring()`)...
以下就是10个关于Java String的面试问题,这些问题涵盖了String的基础、性能优化以及一些高级特性。 1. **String是不可变的吗?** 是的,String在Java中是不可变的。这意味着一旦创建了一个String对象,就不能更改...