java 字符串对象池

  java字符串是一个类,是java虚拟机在启动的时候会实例化9个对象池,其中9个对象池分别用来存储8种基本数据类型(int,float,double,byte,boolean,short,long,char)的包装类和String对象。

  Java String创建对象有两种方式,其中一种是通过直接创建:String str1="Stringhello",另外一种是通过构造函数:String str2=new String("stringhello");前者是通过在对象池里面取对象,后者是直接生成的一个对象。String str3="111";  String str4="111"; system.out.println(str3==str4);==>>输出为:true.这是因为str3和str4都是通过对象池获取,然而通过String str5=new String("111");system.out.println(str3==str5);==>>输出为:false.这是因为str3是通过对象池获取,而str5是直接创建,故而性质不同;

  == :这种比较方法引用性质要相同才是true,而equal()方法则只需要值相同即可。

时间: 2024-11-08 11:05:25

java 字符串对象池的相关文章

Java字符串常量池是什么?为什么要有这种常量池?

简单介绍 Java中的字符串常量池(String Pool)是存储在Java堆内存中的字符串池.我们知道String是java中比较特殊的类,我们可以使用new运算符创建String对象,也可以用双引号("")创建字串对象. Java中的字符串常量池 下图,清楚地解释了如何在Java堆内存中维护字符串常量池,以及当我们使用不同的方式创建字符串时在堆内存中如何存放. 之所以有字符串常量池,是因为String在Java中是不可变(immutable)的,它是String interning

java字符串常量池

卧虎藏龙,是一款手机3D游戏.其效果和Pc端3D效果类似,个人感觉还是很好的. 之前曾经看过一个卧虎藏龙的轻功视频,视频内容是从武当山广场开始起跳,施展轻功一直飞到山脚下的视频.之后我对卧虎藏龙就一直很期待. 但是这次封测我只升到了24级,封测便停了,并没有玩到可以施展轻功的地步,或者我没有掌握技巧,这是一个小的遗憾. 因为之前玩Pc游戏刀剑/  剑侠情缘三,就是看中了其中的轻功系统.而卧虎藏龙的轻功操作更让人有玩的冲动,文学功底不行,所以不会描述,大家可以百度一下这个轻功视频:http://1

JAVA 字符串驻留池

一切从String str = new String("abc")说起...    这行代码形式上很简单,其实很复杂.有一个常见的Java笔试题就是问上面这行代码创建了几个String对象.    我刚开始很自然的觉得应该是创建了一个String对象,后来查阅资料,才发现,实际上创建了两个String对象.下面说明为什么创建了两个String对象.    首先,来了解一下Java中的字符串驻留池的概念.JVM为了提高性能,将一下两种形式的字符串放在一个称之为字符串驻留池的内存块中:  

JAVA模式 对象池 简要代码示例

package org.rui.util; import java.util.ArrayList; /** * 对象复用模式 * * @author PC * */ public class PoolManager { //连接池对象 public static class PoolItem { boolean inUse = false; Object item;//池数据 PoolItem(Object item) { this.item = item; } } //连接池集合 privat

关于java字符串常量池

今天发现一个好玩的东西 public static void main(String[] args)    {        String str1 = new StringBuilder("ja").append("va").toString();        System.out.println(str1.intern() == str1);//false                String str2 = new StringBuilder("

【基础】Java 8 中的常量池、字符串池、包装类对象池

1 - 引言 2 - 常量池 2.1 你真的懂 Java的“字面量”和“常量”吗? 2.2 常量和静态/运行时常量池有什么关系?什么是常量池? 2.3 字节码下的常量池以及常量池的加载机制 2.4 是不是所有的数字字面量都会被存到常量池中?3 - 包装类对象池 $\ne$JVM 常量池4 - 字符串池 4.1 字符串池的实现——StringTable 4.2 字符串池存的是实例还是引用?5 - 补充 5.1 永久代为何被 HotSpot VM 废弃? 5.2 为什么 Java 要分常量.简单类型

什么是字符串常量池?

什么是字符串常量池? 在理解字符串常量前,我们先熟悉一下如何创建一个字符串,在Java中有两种方法可以创建一个字符串对象: 使用new运算符.例如: 1 String str = new String("Hello"); 使用字符串常量或者常量表达式.例如: 1 2 String str="Hello"; //(字符串常量) 或者 String str="Hel" + "lo"; //(字符串常量表达式). 这些字符串的创建方

java值和地址值传递、字符串常量池的理解

#java值和地址值传递的理解: - 基本数据类型和基本数据类型的封装类都是:值传递 * 形式参数的改变不会影响实际参数的改变(相当于将值复制一份传递给形参,自身没做任何改变) - 引用数据类型都是 地址值传递 * 形式参数的改变会影响实际参数的改变(将地址值赋值给形参,形参就可以指向实参所指向的地址, 即形参也可以操作实参指向地址的数据了) #注意:String是个特例(当作基本类型处理) - 分析:从String类的源码可以知道,String相当于是char[]的封装类,即具有char类型的

Java中的字符串常量池

最近做到一个题目: 问题:String str = new String("abc"),"abc"在内存中是怎么分配的?    答案是:堆,字符串常量区. 题目考查的为Java中的字符串常量池和JVM运行时数据区的相关概念."abc"为字面量对象,其存储在堆内存中.而字符串常量池则存储的是字符串对象的一个引用. Java中的字符串常量池 Java中字符串对象创建有两种形式,一种为字面量形式,如String str = "droid&qu