您的位置:首页 > 编程语言 > Java开发

Java常用类:字符串相关类

2016-01-08 10:41 513 查看

一: java.lang.String,java.lang.StringBuilder,java.lang.StringBuffer

参考:http://blog.csdn.net/rmn190/article/details/1492013

1.String 字符串常量

    String 类型和 StringBuffer 类型的主要区别在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候都等同于指向了一个新的字符串,所以需要经常改变内容的字符串最好不要用
String ,一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的。

2.StringBuffer 字符串变量(线程安全)

     StringBuffer 对象代表一个字符序列可变的字符串,当一个StringBuffer对象被创建以后,通过其append,insert,reserse及setCharAt等方法可以改变这个对象的字符序列。
    Java.lang.StringBuffer是线程安全的可变字符序列,一个类似于
String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容,可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
    StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中,append 方法始终将这些字符添加到缓冲区的末端,而 insert 方法则在指定的点添加字符。例如,如果
z 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用 z.append("le") 会使字符串缓冲区包含“startle”,而 z.insert(4, "le") 将更改字符串缓冲区,使之包含“starlet”。

3.StringBuilder 字符串变量(非线程安全)     

     java.lang.StringBuilder类是JDK1.5新增的,此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比
StringBuffer 要快,两者的方法基本相同。

二: 字符串比较(equals,compareTo,==)

参考:http://www.cnblogs.com/zhxhdean/archive/2011/03/25/1995431.html
           http://blog.sina.com.cn/s/blog_69dcd5ed0101171h.html

1. 双等号==

 (1)基本数据类型(也称原始数据类型)。byte,short,char,int,long,float,double,boolean 他们之间的比较,双等号==比较的是他们的值。 

 (2)复合数据类型(类) 

   当他们用==进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。

    对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号==进行比较的,所以比较后的结果跟双等(==)的结果相同。

public class TestString {
public static void main(String[] args) {
String s1 = "Monday";
String s2 = "Monday";
if (s1 == s2)
{
System.out.println("s1 == s2");}
else{
System.out.println("s1 != s2");}
}
}
编译并运行程序,输出:s1 == s2说明:s1 与 s2 引用同一个
String 对象 "Monday"。

2.equals



public class TestString {
public static void main(String[] args) {
String s1 = "Monday";
String s2 = new String("Monday");
if (s1 == s2)
{System.out.println("s1 == s2");}
else
{System.out.println("s1 != s2");}
if (s1.equals(s2)) {System.out.println("s1 equals s2");}
else{
System.out.println("s1 not equals s2");}
}
}
我们将s2用new操作符创建

程序输出:

s1 != s2

s1 equals s2

说明s1 s2分别引用了两个"Monday"String对象。

3. 常量池



    使用new String()创建的字符串对象是运行时创建出来的,会被保存到堆内存中,不会保存到常量池中。程序在运行的时候会创建一个常量池当使用 s2 = "Monday" 这样的表达是创建字符串的时候,程序首先会在这个常量池中寻找相同值的对象,在第一个程序中,s1先被放到了池中,所以在s2被创建的时候,程序找到了具有相同值的
s1,将s2引用s1所引用的对象"Monday"。第二个程序中,使用了 new 操作符,于是一个新的"Monday"对象被创建在内存中。

三: Object类







四: 正则表达式

   


          正则表达式是一个用于匹配字符串的模板,可以匹配一批字符串,所以创建正则表达式就是创建一个特殊的字符串。

五: String与基本数据类型间的转换

基本数据类型-->String

        String类的ValueOf()方法,基本数据类型+" "

String-->基本数据类型

        利用基本数据类型包装类提供的静态parseXxx(String s)静态方法,利用包装类提供的Xxx(String s)构造器

                                             


六: toString方法

     该方法是Object类里的一个实例方法,所有的java类都是Object类的子类,因此所有的java对象都具有toString()方法。当java对象和和字符串进行连接运算时,系统自动调用java对象toString()方法的返回值和字符串进行连接运算。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: