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池中。
分享到:
相关推荐
Java字符串池(String Pool)深度解析.docx
下面通过一个简单的样例来说明如何利用apache common pool来应用对象池。...也许本样例并不是很恰当,但是如何StringFormat换成是数据库连接就非常适合池技术了,此样例仅用于说明如何使用apache common pool池而已。
使用JDK1.8、SpringBoot2.2.10.RELEASE、lombok1.18.8、guava23.0、hutool5.3.10、commons-pool2 2.7.0、tika1.22等实现多Ftp连接池实现,通过守护线程实现连接池内连接可用性校验,配置最大、最小连接个数防止Ftp...
在JDK6.0中,StringTable的长度是固定的,长度就是1009,因此如果放入String Pool中的String非常多,就会造成hash冲突,导致链表过长,当调用String#intern()时会需要到链表上一个一个找,从而导致性能大幅度下降;...
文字池[pool of literal strings]和堆[heap]中的字符串对象。 一、引用变量与对象:除了一些早期的Java书籍和现在的垃圾书籍,人们都可以从中比较清楚地学习到两者的区别。A aa;语句声明一个类A的引用变量aa[我常常...
java jdbc帮助类 v1.0 自带连接池 boolean delete(java.lang.String sql) 删除单条记录的方法,适用于简单的sql语句 boolean delete(java.lang.String sql, java.util.Map,java.lang.Object> elements) 根据...
FastPool<std::string> pool; 2.往池添加对象,例如: pool.Add("abc");//要注意这里传入的是构造对象的参数 3.取出一个对象以使用,例如: std::string* p = pool.Pop(); 这一步可以跟上一步结合起来: std::...
The Constant Pool Field Information Method Information Class Variables A Reference to Class ClassLoader A Reference to Class Class Method Tables An Example of Method Area Use The Heap Garbage ...
void setPoolName(java.lang.String poolName) boolean update(java.lang.String sql, java.util.Map,java.lang.Object> elements) 根据输入的参数执行更新操作 boolean update(java.lang.String sql, java...
节点-odbc池 基于通用池的node-odbc连接池。 描述 这是一个连接池模块,为遇到的每个连接字符串创建通用池的实例。 使用此池模块可以获得使用通用池模块的所有好处,包括最小和最大... ODBC_CONNECTION_STRING , functi
全局、线程安全的内存池一个 Rust 库,提供全局、线程安全的内存池,非常适合需要临时暂存缓冲区但又不想不断分配内存的情况。 memory_pool :: borrow ( | aux: & mut String | { aux. push_str ( "Do you like ...
String maxconn = props.getProperty(poolName + ".maxconn", "0"); int max; try { max = Integer.valueOf(maxconn).intValue(); } catch (NumberFormatException e) { log("错误的最大连接数限制: " + ...
连接池 通用,高效,线程安全的C ++连接池 介绍 我们需要一种安全,有效的方式...// Create a pool of 5 MySQL connections shared_ptr<MySQLConnectionFactory> mysql_connection_factory ( new MySQLConnectionFacto
第二个由new在堆里产生一个值为"abc"的对象,该对象完全是String Pool里的"abc"的一个拷贝 第二个+号两边有一个是变量,此时,java会在堆里
[]int、[]string 和 []interface{} 的池 您可以将它们用于任何事情,但我往往最需要这些用于临时工作(短期工作)。 用法 除了它们处理的类型之外, StringsPool 、 IntsPool和AnytingPool具有相同的接口。 首先,...
五、Object的方法介绍和String解析 有的同学要问了,Object和String是我们这一块儿日常一直在使用的东西,为什么要单独拎出来讲呢?其实,他们使用起来虽然简单,但比如Object类是位于java.lang包中的,java.lang是...
2.在工程目录任意位置放入连接池配置文件,如pool.xml,其内容如下: <pool name="default"> oracle.jdbc.driver.OracleDriver <url>jdbc:oracle:thin:@192.168.1.7:1521:TESTDB <username>appuser ...
what it means for std::string or std::any to be termed a "vocabulary type"(Chapter 5 , Vocabulary Types ); and what we might expect fromfuture C++ standards in 2020 and beyond. I assume that you are ...
dynamic-pool 无锁,线程安全,动态大小的对象池。 该池以初始容量开始,如果没有可用空间,它将根据请求继续创建新对象。... name: String , age: u16 , } impl DynamicReset for Person { fn
AndroidManifest解析器 一个纯Java、实现了SAX接口、无任何第三方依赖的 AndroidManifest.xml 解析工具。 AndroidManifest.xml文件格式 ... String Pool Offset 4bytes // 字符串常量池相对于Chunk偏移值 Sty