String类
官方文档中String类的基本说明:
public final class String extends Object implements Serializable, Comparable<String>, CharSequence
Java程序中的所有字面值(string literals),即双引号括起的字符串,如"abc",都是作为String类的实例实现的。
String是常量,其对象一旦创建就不能再被改变。换句话说,String对象是不可变的,每一个看起来会修改String值的方法,实际上都是创造了一个全新的String对象,以包含修改后的字符串内容。
String对象具有只读特性,指向它的任何引用都不可能改变它的值,因此,也不会对其他的引用有什么影响。
字符串连接
为String对象重载的“+”操作符可以用来连接String。
编译器看到String对象后面跟着一个“+”时,就将与之相加的其他对象(可能并不是字符串)也转换为字符串,转换时是通过调用该对象的toString()方法。
当使用+拼接字符串时,会生成新的String对象,而不是向原有的String对象追加内容。
与之形成对比的是StringBuffer类,StringBuffer类使用append()方法追加字符串,向原有对象追加而不是创建新的对象。
append()方法返回当前StringBuffer对象,因此可以串联起来使用。
如:
StringBuffer buffer = new StringBuffer(); buffer.append("Hello").append(" World");
StringBuffer类的toString()方法返回String类对象。
StringBuffer类和String类的主要区别就是StringBuffer类的对象可以改变,而String类的对象一旦创建,就不能改变内容。
Java SE5中引入了StringBuilder,StringBuilder和StringBuffer的主要区别是后者是线程安全的。
String类的equals()方法
String类的equals()方法,覆写了Object类的equals()方法,判断当前字符串与传进来的字符串的内容是否一致。
所以字符串相等的判断是用equals()方法,而不是使用==。
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; }
这是个很好的例子,以后为自己的类覆写equals()方法的时候可以借鉴这个思路。
并且注意,分析一个类的equals()方法时,要看这个类是否覆写了Object类的方法,如果没有覆写,那么该类的equals()方法仍然和Object类中的方法实现一样,即和==实现一样的功能。
String Pool
String Pool,字符串池。
采用字面值赋值方式创建对象
String str1 = "aaa";
String str2 = "aaa";
当以字符串直接创建String类的对象时,会在字符串池中查找是否已经存在该常量。
如上例中,会在String Pool中查找是否存在"aaa"这个对象,如果不存在,则在String Pool中创建一个"aaa"对象,然后将其地址返回,赋给变量str1,这样str1会指向String Pool中的这个"aaa"对象。
如果在String Pool中查找时已经存在该对象,则不创建任何对象,直接将String Pool中的这个对象地址返回,如上面str2直接得到"aaa"对象的地址,它和str1实际上指向同一个对象。
采用new的形式创建对象
采用new的形式创建对象:
String str = new String("aaa");
new关键字必然会创建一个对象。
这种形式创建字符串对象时仍然会在String Pool中查找。
如果没有,则首先在String Pool中创建相应的对象,然后再在堆中创建一个对象;
若相同对象已经存在,则在堆中创建对象。
无论哪种情况,最后返回的地址都是堆中的地址。
如上例,首先在String Pool中查找有没有"aaa"这个字符串对象,如果有,则不在String Pool中再去创建"aaa"这个对象了,直接在堆(heap)中创建一个"aaa"字符串对象,然后将堆中的这个"aaa"对象的地址返回来,赋给str引用。
如果没有,则首先在String Pool中创建一个"aaa"对象,然后再在堆中创建一个"aaa"对象,然后将堆中的这个"aaa"对象的地址返回来,赋给str引用。
intern()方法
调用如"Hello". intern()方法,如果字符串池中已经存在字符串"Hello"(通过equals()方法判断相同),则返回这个对象的引用;如果不存在,则把当前调用intern()方法的对象加入字符串池中,然后返回这个对象的引用。
对于任意的两个字符串s和t来说,
s.intern() == t.intern() 为真等价于 s.equals(t) 为真。
All literal strings and string-valued constant expressions are interned.
即所有的字面值都是interned的,因为它们都在String Pool中。
相关推荐
5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5....
Java中经常用到的String类方法。这些都是比较常用的。欢迎下载!
本文主要介绍了java String类常用方法的例子,具有很好的参考价值,下面跟着小编一起来看下吧
java jdk中string类的源码 ,了解string类的书写,定义和声明
java基础String类选择题练习题,文档包含了答案与分析,适合学习用,本文档仅仅用于学习分享,不得用于商业用途
Java String类为什么是不可变的_动力节点Java学院整理,动力节点口口相传的Java黄埔军校
String类 字符数组 代码及注释 个人笔记 适合初学者
Java的String类是一个重要的核心类,用于处理字符串操作。本文将介绍Java String类的常见操作和用法,包括字符串的创建、比较、连接、截取、替换等。我们还会讨论字符串与其他数据类型之间的转换、字符串的搜索和...
一、什么是Java中的String类? String类是Java中表示字符串的类。它是不可变的,一旦创建了一个字符串对象,就无法修改它。 二、String类和StringBuilder类有什么区别? String类和StringBuilder类的最主要区别在于...
Educoder题目:Java面向对象 - String类答案解析
用于课程设计String类的实现,上传了String类设计的发布软件,审核通过后再发布程序源代码
Java中String类和常用方法 实例化String对象
NULL 博文链接:https://1017401036.iteye.com/blog/2254375
希望对各位有所帮助,关于Java String 类的小结
自制的java string类,帮助java初学者,掌握java编程技巧
String类的常用方法(一) 目录 课程导入 掌握获取字符串长度的方法 掌握字符串连接、截取子串的方法 方法定义:public int length() 获取字符串的长度 例如: String message = “Welcome to Java”; System.out....
Java String类一、String类概述及特点1.概述2.特点二、字符串的创建及常量池的概念1.常用的字符串的创建形式2.常量池三、String类常用方法1.字符串比较的相关方法2.字符串获取的相关方法3.字符串截取的相关方法4....
主要介绍了Java String类正则操作,结合实例形式分析了java针对数字的正则验证、过滤及邮箱正则验证相关操作技巧,需要的朋友可以参考下
int indexOf(String str):返回指定字符串str在此字符串中第一次出现的位置。 int lastIndexOf(int ch):返回指定字符ch在此字符串中最后一次出现的位置。 int lastIndexOf(String str):返回指定子字符串str在此字符串...
主要介绍了java String类功能、原理与应用案例,结合实例形式详细分析了java String类的基本功能、构造方法,以及使用String类实现统计、判断、转换等功能相关操作技巧,需要的朋友可以参考下