String类源代码分析

  1. equals()方法,该方法定义在Object类当中,因此Java中的每个类都具有该方法,对于Object类的equals()方法来说,它是判断调用equals()方法的引用与传进来的引用是否一致,即这这两个引用是否指向同一个对象。
  2. public boolean equals(Object obj){
        return (this == obj);
    
    }

3. String的equals()方法重写Object的equals()方法

4.对于String类的equals()方法来说,它是判断当前字符串与传进来的字符串的内容是否一致。

public boolean equals(Object anObject){
    if(this == anObject){
        return true;
    }
    if(anObject instanceof String){
        String anotherString = (String)anObject;
        int n = count;
        if(n==anOtherString.count){
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = offset;
            int j = anotherString.offset;
            while(n--!=0){
                if(v1[i++]!=v2[j++]){
                    return false;
                }
                return true;
            }
            
        }
        return false;
    }
}

5.对于String对象的相等性判断来说,请使用equals()方法,而不要使用==。

6.String是常量,其对象一旦创建完毕就无法改变。当使用+号拼接字符串时,会自动生成新的String对象,而不是向原有的String对象追加内容。

7.String Pool(字符串池):

8.String s = "aaa";

1)查找String pool中是否存在“aaa”这个对象,如果不存在,则在String pool中创建了一 个“aaa”对象,然后将String pool中的这个“aaa”对象的地址返回来,赋给引用变量s,这样s会指向String pool中的这个"aaa"字符串对象。

2)如果存在,则不创建任何对象,直接将String Pool中的这个“aaa”对象地址返回来,赋给s引用。

9.String s = new String("aaa");

1)首先在String Pool中查找有没有“aaa”这个对象。如果有,则不在String Pool中去创建“aaa”这个对象了,直接在堆中(heap)中创建一个“aaa”字符串对象,然后将堆中的这个“aaa”对象的地址返回来,赋给s引用,导致s指向了堆中创建的这个“aaa”字符串对象。

2)如果没有,首先在String Pool中创建一个"aaa"对象,然后再在堆(heap)中创建一个“aaa”对象,然后将堆中的这个"aaa"对象的地址返回来,赋给s引用,导致s指向了堆中所创建的这个"aaa"对象。

				
时间: 2024-08-25 11:02:31

String类源代码分析的相关文章

String类原理分析及部分方法

//String类原理分析及部分方法 //http://www.cnblogs.com/vamei/archive/2013/04/08/3000914.html //http://www.cnblogs.com/YSO1983/archive/2009/12/07/1618564.html //String类包含在java.lang包中,这个包在java的时候就自动import //String类是唯一一个不需要new关键词来创建对象的类. public class Test{ public

Android万能适配器base-adapter-helper的源代码分析

项目地址:https://github.com/JoanZapata/base-adapter-helper 1. 功能介绍 1.1. base-adapter-helper base-adapter-helper 是对传统的 BaseAdapter ViewHolder 模式的一个封装.主要功能就是简化我们书写 AbsListView 的 Adapter 的代码,如 ListView,GridView. 1.2 基本使用 mListView.setAdapter(mAdapter = new

Android研发中对String的思考(源代码分析)

1.经常使用创建方式思考: String text = "this is a test text "; 上面这一句话实际上是运行了三件事 1.声明变量 String text; 2.在内存中开辟空间 (内存空间一) 3.将变量的text的引用指向开辟的内存空间 当有 text = "this is a change text"; 这一句话运行了两件事 1.在内存中开辟空间 2.将变量text 的引用指向 新开辟的内存空间 3.内存空间一此时依旧存在,这就是说明了St

Java面试准备之String类专项突破+源码分析

String的源码中有很多Arrays的方法使用,建议先参阅Arrays的类库 基本介绍: String是一个比较特殊的类,有很多种建立的方法. 如果使用传统的构造方法比如 String s = new String("字符串");这时的对象会在堆上分配,这时候比较两个字符串地址就不相等,而用""双引号包起来的内容会在常量池中做停留,这时如果有两个内容一样的地址就一样了. 因此,使用==来比较字符串是不靠谱的. String类还实现了三个接口:Serializabl

JDK中String类的源码分析(二)

1.startsWith(String prefix, int toffset)方法 包括startsWith(*),endsWith(*)方法,都是调用上述一个方法 1 public boolean startsWith(String prefix, int toffset) { 2 char ta[] = value; 3 int to = toffset; 4 char pa[] = prefix.value; 5 int po = 0; 6 int pc = prefix.value.l

c++中string类的源代码

一:回顾 (1)c++中的string类是在面试中和笔试中经常考的题目: (2)c++中的string类和fstream类合起来是处理外部数据的利器: (3)string类经常用到find find_first_of find_first_not_of find_last_of find_last_not_of substr replace等,以及联合使用来达到java中的split和trim 二:下面是简单的实现了一下string类,参照的是STL源码,但是自己理解的还是不够深,难免有一些错误

String类常用方法源码分析

环境:JDK8 主要分析String类的一些常用的方法源码. String 先看String类的定义: public final class String    implements java.io.Serializable, Comparable<String>, CharSequence 可以看到String类被final修饰,因此不能被继承.String类还实现了序列化接口Serializable.可比较的接口Comparable并指定范型为String,该接口必须要实现int comp

String类中intern方法的原理分析

一,前言 ? 昨天简单整理了JVM内存分配和String类常用方法,遇到了String中的intern()方法.本来想一并总结起来,但是intern方法还涉及到JDK版本的问题,内容也相对较多,所以今天就弥补昨天缺失的知识点. 二,String.intern() ? 先来看下网上流行的关于intern()方法的示例代码: public static void main(String[] args) { String s = new String("1"); s.intern(); St

String类的2种赋值分析

1.字符串常量池 2.String name = new String("你好"); 3.String name = "你好"; 分析对象在内存中的结构: 常量池--用来存储字符串 你好--是常量:name--是变量 每当new一个对象时,在堆中会生成一个对象,栈中的指针指向堆中.你好是堆内存中存储的值,会将"你好"这个字符串到字符串常量池中去检查,看"字符串常量池"中是否有"你好"这个常量--若没有,就会