zoukankan      html  css  js  c++  java
  • JAVA中新建String的详细过程

    前言:本文解决的问题

    • JAVA String s ="ABc";的过程是怎样的

    Java中的String

    Java中的String是不可改变的,一旦创建就不可再改变。常见的s1= s1+s2其实是重新创建了String。如果要创建可以更改的字符串类,建议使用StringBuilder或者StringBuffer。在回答口头的问题前先来看看String的源码。

    public final class String
        implements java.io.Serializable, Comparable<String>, CharSequence {
    
    }
    

    从String前面的修饰符我们可以看到String是final类,不可以继承。在String提供的各种方法如subString、charAt()、concat()中,没有可以更改String内部元素的,String一旦被更改其实就是创建了新的字符串对象

    Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are immutable they can be shared.

    String s ="ABc";的新建过程

    JAVA中有个字符串池,它存储在堆(heap)中,可共享。任何时候一个新的对象被创建,会首先在字符串池中检查,那个对象是否存在,如果已经存在了,则返回该对象的引用;如果不存在,则新建。具体可以看下图。
    java-string-pool

    下面是源代码演示:

    public static void main(String[] args) {		
    		String s1 = "Apple";
    		String s2 = "Mangle";
    		String s3 = "Apple";
    		System.out.println(s1==s3);
    		System.out.println(s1==s2);
    	}
    

    结果:

    true
    false

    总结

    JAVA中在使用=号创建String对象时,会线检查JAVA String pool中有没有该对象,如果有,则把引用值返回;如果没有则新建。

  • 相关阅读:
    UITableView 排序、删除
    iOS中arc的设置
    dynamics ax 2009 distinct实现及数组集合
    将关系数据库映射到业务实体
    常见负载均衡实现
    ibatis经验
    百度贴吧10亿量级LAMP架构分享
    dynamics ax 2009 字段类似的表绑定界面注意
    [转]大型动态应用系统框架
    .net 发展历程
  • 原文地址:https://www.cnblogs.com/java-learner/p/9667581.html
Copyright © 2011-2022 走看看