Sun用一个叫String池的东东来优化对String的处理。这个String池使很多Java新人感到迷惑。String池是一个用来缓存创建过的String对象的区域。一个需要注意的地方是String池只有对那些用‘literals’创建的String起作用。也就是说用构造器创建的String对象不会存到String池中。请看下面一个例子:
public class Main {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
System.out.println("s1 = " + s1);
System.out.println("s2 = " + s2);
System.out.println("s1 == s2? " + (s1 == s2));
System.out.println("s1.equals(s2)? " + (s1.equals(s2)));
}
}
运行结果如下
引用
s1 = abc
s2 = abc
s1 == s2? true
s1.equals(s2)? true
如果你想创建一个在内存中全新的String对象,可以用构造器创建一个String对象,因为他们不会被放到String池中。
public class Main {
public static void main(String[] args) {
String s1 = "abc";
String s2 = new String("abc");
System.out.println("s1 = " + s1);
System.out.println("s2 = " + s2);
System.out.println("s1 == s2? " + (s1 == s2));
System.out.println("s1.equals(s2)? " + (s1.equal(s2)));
}
}
运行结果如下
引用
s1 = abc
s2 = abc
s1 == s2? false
s1.equals(s2)? true
String有一个方法我们需要在这里介绍一下:intern(),这个方法会返回一个String对象,如果被调用的String对象能在String池中找到一个和它一样的(字面上相同)对象,就返回这个String池中的对象。如果找不到的话,就返回一个新的String对象,并把这个String对象放到String池中。
分享到:
相关推荐
`String Pool`是存储`String`字面量的缓存池,当通过字面量的方式创建`String`对象时,Java虚拟机首先检查`String Pool`中是否已经存在相同的字符串,如果存在,则返回该字符串的引用,而不是创建一个新的对象。...
* ConnectionPool(String jdbcDriver, String dbUrl, String dbUsername, String dbPassword) 该构造函数用于初始化ConnectionPool对象,设置数据库驱动类串、数据库URL、连接数据库用户名和连接数据库用户密码。 ...
下面通过一个简单的样例来说明如何利用apache common pool来应用对象池。...也许本样例并不是很恰当,但是如何StringFormat换成是数据库连接就非常适合池技术了,此样例仅用于说明如何使用apache common pool池而已。
### Java 连接池创建与配置详解 #### 一、Java 连接池的基本概念 在Java应用程序中,频繁地创建和销毁数据库连接是非常低效的。为了提高性能和资源利用效率,通常会使用数据库连接池来管理这些连接。连接池预先...
使用JDK1.8、SpringBoot2.2.10.RELEASE、lombok1.18.8、guava23.0、hutool5.3.10、commons-pool2 2.7.0、tika1.22等实现多Ftp连接池实现,通过守护线程实现连接池内连接可用性校验,配置最大、最小连接个数防止Ftp...
**常量池(Constant Pool)**:在 Java 编译阶段确定的数据集合,存储在 `.class` 文件中。它包含了类、方法和接口的常量数据,也包括字符串常量。 **字符串池**:这是 JVM 内部的一个特殊结构,用于存储字符串字面...
Console.WriteLine("Connection will be returned to the pool."); } } } ``` 在这个例子中,`Pooling=true`参数表示启用连接池,`Max Pool Size=100;`设置了连接池的最大大小为100。`using`语句确保在操作完成...
- **直接赋值**:这种方式会在**字符串常量池**(String Pool)中查找或创建一个对应的`String`对象,并将变量指向该对象。字符串常量池是Java堆的一部分,专门用来存储字符串字面量。如果字符串常量池中已经存在...
`,该字符串会被存储在一个特殊的区域——字符串常量池(String Constant Pool)中。如果尝试再次创建一个相同内容的字符串,如`String s2 = "Hello";`,实际上s2指向的是字符串池中已存在的"Hello"。这种方式可以...
首先,我们需要理解字符串常量池(String Constant Pool)的概念。当程序中通过直接赋值的方式定义一个字符串时,例如 `String a = "ab";` 这样的字符串会存储在字符串常量池中。如果在程序中再次尝试创建一个相同的...
1. **常量池** (Constant Pool): 每个类或接口都有自己的常量池,它包含了编译期间确定的所有字面量和符号引用。 2. **堆** (Heap): 动态分配的内存区域,用于存放对象实例。 3. **栈** (Stack): 存放局部变量、操作...
在Spring Boot项目中,可以使用Apache Commons Net库来实现FTP功能,并使用Apache Commons Pool2库来实现FTP连接池。在`pom.xml`文件中添加如下依赖: ```xml <groupId>org.springframework.boot <artifactId>...
常量池(constant pool)是Java中的一个概念,它指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。常量池包括了关于类、方法、接口等中的常量,也包括字符串常量。例如String s0="kvill";,String ...
使用这种方式创建的字符串会被存储在一个特殊的内存区域——字符串常量池(String Literal Pool)中。如果再次尝试创建相同的字符串字面量,Java会直接引用已存在的字符串对象,而不是创建新的实例。 2. **new...
使用Apache Commons Pool的基本步骤包括创建工厂、创建池和从池中获取/返回对象: ```java PooledObjectFactory<String> factory = new DefaultPooledObjectFactory<String>() { @Override public String ...
当创建一个新的 String 对象时,Java 会首先在 String.Pool 中查找是否已经存在该字符串,如果存在则返回该字符串的引用,否则创建一个新的字符串对象。 五、String 对象的应用 String 对象是 Java 中最基本的数据...
在 JAVA 中,存在一个字符串池(String Pool),用于保存和共享 String 对象。String 对象池可以提高效率,因为它可以避免创建重复的 String 对象。 String 对象池是由 String 类维护的,可以通过 intern() 方法来...
3. 常量池(Constant Pool):是堆内存中的一部分,用来存储字符串常量和基本类型常量,以及`public static final`修饰的变量。常量池中的数据可以被多个对象共享。 4. 静态存储:用于存储`static`定义的成员,这些...