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

正确认识String池

    博客分类:
  • Java
 
阅读更多

String Pool是运行时常量池中虚拟出来的一个概念。

举个例子:

String str0 = "abc";

String str1 = new String("abc");

 

    当执行String str0 =”abc”;时,JVM会在栈中创建三个char型的值 ’a’ , ’b’ 和 ’c’ ,然后在堆中创建一个String对象,它的值(value)是刚才在栈中创建的三个char型值组成的数组{ ’a’ , ’b’ , ’c’ },最后这个新创建的String对象的值”abc”会被添加到运行时常量池中。注意,在编译期就已经确定将该对象存储到String Pool中了。

    如果我们接着执行String str1=new String(”abc”);代码,由于”abc”已经被创建并保存于常量池中,因此JVM只会在堆中新创建一个String对象,但是它的值(value)是共享前一行代码执行时在常量池中的 ” abc ” 。注意,编译期在String Pool中创建一个,运行时Heap中创建一个。

    运行是常量池是方法区的一部分,相对于Class文件常量池的另外一个重要特性是具备动态性,Java语言并不要求常量一定只有编译器才能产生,运行期间也可能将新的常量放入池中,这种特性被开发人员利用得比较多的便是String类的intern()方法。

 

 String he = "he";

 String hello = he + "llo"; // hello=="hello" false,档he修饰为final时,为true,原因是编译器优化

 he==he.intern true

 

定义很长的字符串或字符串数组,会否发生栈溢出

0
0
分享到:
评论

相关推荐

    spring redis集成

    **Spring Redis 集成详解** 在现代的Java开发中,Spring框架因其强大的功能和灵活性而备受青睐。...通过以上介绍,你应该已经对Spring如何集成Redis有了全面的认识,可以尝试在自己的项目中实践这些知识。

    java代码绑定时间

    在Java编程中,特别是在处理与数据库交互的应用场景下,正确地使用数据库绑定变量对于提升系统性能、减少资源消耗具有至关重要的作用。本文将围绕“Java代码绑定时间”这一主题,深度剖析在Java程序中使用Oracle绑定...

    Java应届生面试题1.doc

    创建了两个 String 对象:一个是字符串常量池中的“xyz”,另一个是堆中 new 出来的 String 对象。 6. String 和 StringBuffer、StringBuilder 之间区别。(5 分) String 是不可变的,StringBuffer 和 ...

    .NET开发者常会忽略的几个错误

    - 使用连接池管理数据库连接,以提高资源利用率和响应速度。 #### 2. 创建的对象只管用,不管释放 在.NET开发中,内存管理是一个重要的话题。很多开发者在创建对象后没有及时释放,导致内存泄漏。 **原因分析:**...

    java SE.docx

    5. **String的声明方式**:Java中的字符串是不可变的,可以使用`String str = "Hello"`或`String str = new String("Hello")`来声明,两者区别在于内存分配的位置,前者在常量池,后者在堆内存。 6. **转义字符**:...

    java面试题

    wait()是Object类的方法,对此对象调用了wait方法导致本线程放弃对象锁,进入等待锁定池,只有针对此对象发出notify方法后本线程才进入对象锁定池准备获得对象锁进入运行状态。 同步和异步,在什么情况下分别使用? ...

    ACCP6.0 JAVA第一章TP01.ppt

    理解字符串池的概念和String与其他字符串类(如StringBuilder和StringBuffer)的区别也是学习的重点。 8. **异常处理**:Java通过异常处理机制来处理程序运行时可能出现的问题,如`try-catch-finally`块的使用,...

    oracle-jdbc官方文档

    通过以上介绍,我们对Oracle JDBC有了更全面的认识,了解了如何安装配置以及使用该技术来开发强大的Java数据库应用程序。此外,还讨论了一些高级特性和常见问题的解决方法,这对于实际应用非常有帮助。

    Java基础题目

    这说明字符串常量池中的字符串一旦创建,其地址就不会改变。 ### 类方法的调用 13. **静态方法**:在Java中,使用`static`关键字修饰的方法可以直接通过类名来调用。例如,如果有`public static void myMethod()`...

    JAVA面试大全包含绝大部分JAVA程序员面试的问题

    3. String类型:String在Java中不是基本数据类型,而是对象,它继承自Object类,且是不可变的。 4. 浮点型表示:float类型的变量必须以f或F结尾来表示,因此float f = 3.4f是正确的,但float f = 3.4是错误的,因为...

    HibernateTemplate的方法使用

    - **DataSource**:数据库连接池,负责管理与数据库之间的连接。 - **SessionFactory**:由 Hibernate 的配置文件或注解生成,是线程安全的,整个应用只需一个实例。 - **HibernateTemplate**:基于 ...

    java全面的知识体系结构总结.docx

    - **特殊处理**: String 类型有一个特殊的字符串池,用于缓存字符串实例,从而提高效率。字符串池中的垃圾回收策略可能与普通对象不同。 ##### 1.2.3 通过编程影响垃圾回收 尽管无法直接控制垃圾回收,但可以通过...

    PHP内核介绍及扩展开发指南

    PHP内核中的内存管理是通过内存池(Memory Pool)实现的,它为短寿命的对象分配内存,减少了频繁的内存分配和释放操作,从而提高了性能。文件处理方面,PHP内核提供了一系列API,允许扩展开发者直接读写文件,而无需...

    java线程与模式总结

    当一个线程调用对象的`wait()`方法时,它将释放该对象的监视器锁(也就是synchronized锁),并将线程放入该对象的等待池中,直到收到`notify()`或`notifyAll()`通知或达到指定的等待时间。`wait()`方法通常配合`...

    AIC的Java课程1-6章

     正确使用各种Java运算符,如一元运算符,算术运算符,关系运算符,逻辑运算符,条件运算符和赋值运算符等。  辨别使用if,if…else,switch选择结构执行不同的动作。  辨别使用while,for,do…...

Global site tag (gtag.js) - Google Analytics