`
JQXChao
  • 浏览: 18448 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

java字符串池和内存分配

    博客分类:
  • JAVA
阅读更多
	/**
	 * public String intern()
	 * 返回字符串对象的规范化表示形式。
	 * 一个初始为空的字符串池,它由类String私有地维护。
	 * 当调用intern方法时,如果池已经包含一个等于此String对象的字符串(用equals(Object)方法确定),则返回池中的字符串。
	 * 否则,将此String对象添加到池中,并返回此String对象的引用。
	 * 它遵循以下规则:对于任意两个字符串s 和t,当且仅当s.equals(t)为true时,s.intern() == t.intern()才为true。
	 */
	public static void main(String[] args) {
		String a = new String("abc");
		String b = new String("abc");
		String c = "abc";
		System.out.println(a == c);//false
		System.out.println(b == c);//false
		a = a.intern();
		b.intern();
		System.out.println(a == c);//true
		System.out.println(b == c);//false
	}

       Java运行环境有一个字符串池,由String类维护。执行语句String str="abc"时,首先查看字符串池中是否存在字符串"abc",如果存在则直接将"abc"赋给str,如果不存在则先在字符串池中新建一个字符串"abc",然后再将其赋给str。

      执行语句String str=new String("abc")时,不管字符串池中是否存在字符串"abc",直接新建一个字符串"abc"(注意:新建的字符串"abc"不是在字符串池中),然后将其付给str。前一语句的效率高,后一语句的效率低,因为新建字符串占用内存空间。

      同时,String对象是不可变的。查看JDK文档你就会发现,String类中每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,以包含修改后的字符串内容。而最初的String对象则丝毫未动。

分享到:
评论

相关推荐

    理解java中的字符串的内存分配

    ### 理解Java中的字符串内存分配 #### 概述 在Java中,字符串是一种非常重要的数据类型,广泛应用于各种程序开发场景之中。对于开发者来说,深入理解字符串的内存分配机制不仅能帮助他们写出更高效的代码,还能...

    有关Java中字符串的几个问题的讨论

    `new`关键字创建的字符串会在堆内存中分配,而直接赋值的方式会查找常量池,如果常量池中已有相同的字符串,就直接引用,否则才会添加到池中。 2. **字符串常量池**: 字符串常量池是一个特殊的存储区域,用于...

    java内存分配详解

    #### 二、字符串内存分配详解 接下来我们重点分析Java中字符串的不同声明方式及其内存分配情况: 1. **Strings1;** - **描述**:声明了一个`String`类型的变量`Strings1`,但没有进行初始化,也没有存储任何对象...

    java 字符串内存分配的分析与总结(推荐)

    本文将深入探讨Java字符串内存分配的机制,以便更好地理解它们在程序运行时的行为。 首先,我们要明确Java中的字符串有两种主要的创建方式:直接赋值和使用`new`关键字。例如: 1. `String a = "123";` 2. `String...

    java 创建字符串缓存类

    通过使用`StringBuffer`或`StringBuilder`以及自定义缓存类,我们可以有效地管理字符串对象,避免不必要的内存分配。在实际项目中,可以根据需求调整缓存大小、选择合适的线程安全机制,以达到最佳的性能和资源利用...

    一种针对Java中字符串的内存管理方案 (1).pdf

    Java中的字符串内存管理是优化应用程序性能的关键因素之一。本文提出的是一种针对Java字符串的内存管理方案,旨在通过主动回收无用字符串占用的堆空间,提高内存利用率,并减轻垃圾收集器的压力,从而提升Java虚拟机...

    比较字符串1

    解决这个问题的程序可以使用Java编写,利用Java的字符串API和ASCII码知识。以下是一个简单的Java代码实现: ```java import java.util.Scanner; public class CompareStrings { public static void main(String[]...

    java数组与字符串用法小结

    在Java编程语言中,数组和字符串是两种非常重要的数据类型,它们在处理大量数据或文本时扮演着至关重要的角色。本文将围绕标题“java数组与字符串用法小结”及描述中的知识点进行详细阐述。 #### 一、数组的初始化...

    文件夹搜索指定字符串软件

    7. **用户界面**:虽然描述中未提及,但通常这类工具会有用户友好的图形用户界面(GUI),可能使用Java的Swing或JavaFX库来构建,让用户可以方便地输入要搜索的字符串和指定文件夹。 8. **结果展示**:找到的文件...

    java内存分配之常量池,栈,堆1

    在运行时,如果两个字符串的值相等,它们在常量池中可能只有一份拷贝,这是Java字符串常量池复用机制的体现。在Java 6及之前,字符串常量池位于永久代,从Java 7开始移到了堆中。 栈和堆之间的区别在于,栈中的数据...

    Java 中的字符串常量池详解

    这个特性使得字符串常量池能够安全地存储和复用字符串,避免不必要的内存分配。 ### 字符串常量池的工作原理 当程序创建一个字符串对象,特别是通过字面量的形式,如`String str = "example"`,JVM会检查字符串...

    java核心 内存分配问题

    - 合理使用数据结构,如ArrayList和LinkedList,它们在内存分配和访问性能上有不同特点。 - 考虑使用弱引用、软引用等,这些引用不会阻止对象被垃圾回收,有助于内存管理。 理解Java内存分配对于编写高效、无内存...

    Java源码海量字符串的快速操作.rar

    Java中的字符串是不可变对象,为了提高性能和内存利用率,引入了字符串池。当创建一个字符串时,Java会检查池中是否存在相同内容的字符串,如果存在则直接引用,否则新建并添加到池中。使用`String.intern()`方法...

    java 倒置字符串

    这种方法虽然更直接,但涉及更多的内存分配和循环,可能在处理大量数据时效率较低。 ```java public class ReverseString { public static String reverse(String str) { char[] chars = str.toCharArray(); int...

    深入Java核心_Java内存分配原理精讲

    在Java 8之前,这部分内存被称为永久代,容易因字符串常量池溢出等问题引发Full GC。Java 8后,这部分改为元空间,存储在native内存中,减少了对JVM内存的限制。 4. **程序计数器**:每个线程都有一个独立的程序...

    java内存分配机制详解

    本文旨在详细介绍Java内存分配机制中的几个关键概念:寄存器、栈、堆、静态域、常量池及其在Java运行时环境中的角色与功能。 #### 二、Java内存分配机制概述 Java内存分配主要涉及以下几个区域: 1. **寄存器**:...

    Java内存分配原理精讲

    - **栈**:速度快、内存分配和释放效率高,但生存周期固定,不适合存储大对象或生命周期较长的对象。 - **堆**:提供动态内存分配的能力,适合存储生命周期不确定的大对象。但由于需要垃圾回收机制,访问速度相对较...

    Java中堆内存与栈内存分配浅析

    Java内存分配策略包括静态存储分配、栈式存储分配和堆式存储分配。静态存储分配在编译时就确定了变量的内存需求,栈式分配在运行时按需分配,而堆式分配则处理编译时和运行时都无法确定存储需求的数据结构,如可变...

Global site tag (gtag.js) - Google Analytics