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

字符池

 
阅读更多
http://blog.csdn.net/cs_lht/article/details/6742531

Stringstr1=”java”;   //指向字符串池
String str2=”blog”;  //指向字符串池

Strings=str1+str2;  //s是指向堆中值为"javablog"的对象,+运算符会在堆中建立来两个String对象,这两个对象的值分别是"java""blog".也就是说从字符串池中复制这两个值,然后在堆中创建两个对象,然后再建立对象s,然后将"javablog"的堆地址赋给s.   这句共创建了?个String 对象!
System.out.println(s==”javablog”);  //结果是false。
Jvm确实对型如String str1=”java”;的String对象放在常量池里,但是它是在编译时那么做的,而Strings=str1+str2;是在运行时刻才能知道,也就是说str1+str2是在堆里创建的,所以结果为false了。
如果改成一下两种方式:
String s="java" + "blog";//直接将"javablog"放入字符串池中,System.out.println(s==”javablog”); 的结果为true,这个句子创建了?个String对象
String s=str1+ "blog";//不放入字符串池,而是在堆中分配,System.out.println(s==”javablog”);的结果为False,   这个句子创建了?个String对象
总结
综上所述,创建字符串有两种方式:两种内存区域(pool,heap)
1," " 引号创建的字符串在字符串池中
2,new,new创建字符串时首先查看池中是否有相同值的字符串,如果有,则拷贝一份到堆中,然后返回堆中的地址;如果池中没有,则在堆中创建一份,然后返回堆中的地址(注意,此时不需要从堆中复制到池中,否则,将使得堆中的字符串永远是池中的子集,导致浪费池的空间)!

另外,对字符串进行赋值时,如果右操作数含有一个或一个以上的字符串引用时,则在堆中再建立一个字符串对象,返回引用;如Strings=str1+ "blog";
分享到:
评论

相关推荐

    Java字符池.pdf

    Java字符池,也被称为常量池,是Java内存管理中一个关键的概念,主要用来存储编译期就已经确定的各种常量,包括字符串常量、类、方法、接口等信息。理解字符池对于优化Java程序性能至关重要。 1. **String对象与...

    第4节: 揭秘JVM字符串常量池和Java堆-01

    第4节: 揭秘JVM字符串常量池和Java堆-01第4节: 揭秘JVM字符串常量池和Java堆-01第4节: 揭秘JVM字符串常量池和Java堆-01第4节: 揭秘JVM字符串常量池和Java堆-01第4节: 揭秘JVM字符串常量池和Java堆-01第4节: ...

    随机字符串生成器.exe

    本工具用于生成随机字符串,可以自定义字符池及字符串长度。欢迎下载使用! 本工具用于生成随机字符串,可以自定义字符池及字符串长度。欢迎下载使用!

    基于 .NET 6.0控制台框架的随机密码生成器源代码,可设置密码长度及组成形式,含可执行文件

    - 获取字符池,包含所有 ASCII 表中可用的字符,如数字、字母、符号(不包含空格、DEL 等)。 - 字符池排列顺序:数字-字母-符号(默认字母为必须,因此放在中间)。 - 根据密码长度,生成字符数组,每个元素都从...

    winform 字符串池源码

    字符串池的主要目的是减少内存中的重复字符串实例,当创建一个新字符串时,.NET会首先检查字符串池中是否存在相同的字符串,如果存在,则直接返回池中的引用,而不是创建新的实例。这样避免了大量的内存分配和垃圾...

    JAVA字符串池和字符对象[参照].pdf

    Java字符串池和字符对象是Java编程中的重要概念,主要涉及到String类的特性和内存管理。在Java中,String是一个不可变类,这意味着一旦创建了一个String对象,它的值就不能被修改。这种不变性使得String对象在多线程...

    随机字符变换效果的jQuery插件开发教程

    这里我们使用了不同的字符池来确保每个类型的字符都能被均匀随机地选取到。这比使用一个包含所有字符的大池子要更高效且合理。 #### 第三步:编写插件主体 接下来,我们需要编写插件的核心代码。这部分代码负责...

    Sybase安装+字符集设置+连接池设置+卸载

    本文将详细阐述Sybase的安装、字符集设置、连接池配置以及卸载的相关知识。 首先,让我们从Sybase的安装开始。安装过程通常包括以下几个步骤: 1. 下载安装包:根据操作系统(如Windows或Linux)选择相应的安装文件...

    字符数组的存储方式 字符串常量池.docx

    字符串常量池是一个特殊的区域,它存储了程序中所有的字符串常量,避免了多次创建相同的字符串对象。本文将详细探讨字符串常量池的存储方式以及与字符串相关的内存管理策略。 首先,字符串常量池位于JVM的永久代...

    什么是字符串常量池?Java开发Java经验技巧共6页.p

    在Java编程语言中,字符串常量池(String Constant Pool)是一个重要的概念,它与程序的内存管理和性能优化密切相关。理解这个概念对于任何Java开发者来说都至关重要。字符串常量池是Java虚拟机(JVM)在运行时为...

    java基础心得总结.rar

    这时s指向堆里的一块内存,这个内存里的地址指向字符池里的"thanks"; 变量会存放在堆栈中,句柄也会存放在堆栈中,对象会放在堆中,也就是内存池中。 static方法不存在override问题,当A类继承于B类时(假设A,B两类...

    XCOM2CharacterPoolUtility:一个独立的工具,用于创建字符,合并池以及自定义XCOM 2字符池屏幕中可用的任何选项。 支持几种流行的mod

    XCOM2CharacterPoolUtility是一款专为XCOM 2游戏设计的独立工具,它为玩家提供了丰富的自定义功能,允许用户创建和管理游戏中的角色池,进一步拓展了游戏的可玩性和个性化程度。这款工具的独特之处在于它不仅限于...

    [示例][PHP]RandomLib-master生成随机数和随机字符串的PHP库.zip

    通常情况下,当我们要生成一个随机字符串时,总是先创建一个字符池,然后用一个循环和mt_rand()或rand()生成php随机数,从字符池中随机选取字符,最后拼凑出需要的长度。RandomLib-master生成随机数和随机字符串的...

    RandomLib-master生成随机数和随机字符串的PHP库.zip

    通常情况下,当我们要生成一个随机字符串时,总是先创建一个字符池,然后用一个循环和mt_rand()或rand()生成php随机数,从字符池中随机选取字符,最后拼凑出需要的长度。RandomLib-master生成随机数和随机字符串的...

    8 StringTable(字符串常量池).md,学习代码

    **StringTable(字符串常量池)详解** 在Java编程语言中,`StringTable`是一个重要的概念,它涉及到字符串对象的创建、存储以及内存管理。理解`StringTable`的工作原理对于优化程序性能和节省内存资源至关重要。 #...

    图形验证码(servlet实现)

    2. 从字符池中随机选取一定长度的字符串作为验证码。通常,验证码的长度为4-6位。 3. 为了增加安全性,可以将字符串进行某种变形,例如随机改变字母大小写、添加噪声等。 步骤二:创建图像 1. 使用Java的`java.awt`...

    JAVA 字符串应用笔记

    字符串的`intern()`方法会将字符串对象加入到字符串池中,如果字符串池中已有相同的字符串,则返回池中的引用。 10. **编码与解码**: 字符串与字节之间的转换涉及到编码问题,如`getBytes()`和`new String(byte...

    Java 中的字符串常量池详解

    Java中的字符串常量池是Java虚拟机(JVM)为了优化字符串对象的使用而设立的一个特殊区域,它存储了程序中所有的字符串字面量。在Java中,字符串是不可变的,这意味着一旦创建,就不能修改。这个特性使得字符串常量...

Global site tag (gtag.js) - Google Analytics