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中有没有该对象,如果有,则把引用值返回;如果没有则新建。

  • 相关阅读:
    oracle ORA01001,请求资源正忙或无效
    Flex[Embed(source='assets/error.png')]无法解析用于转换的代码错误
    正在覆盖未标记为 override 的函数
    LINUX umask详解
    C++服务器学习路线
    计算kappa系数
    umask的含义及设置
    Seurat的各种数据成员访问
    GAN训练判别器和生成器时的顺序与detach
    autograd.grad 学习
  • 原文地址:https://www.cnblogs.com/java-learner/p/9667581.html
Copyright © 2011-2022 走看看