Java常用类:字符串相关类
2016-01-08 10:41
513 查看
一: java.lang.String,java.lang.StringBuilder,java.lang.StringBuffer
参考:http://blog.csdn.net/rmn190/article/details/14920131.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.htmlhttp://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()方法的返回值和字符串进行连接运算。相关文章推荐
- SpringMVC + security模块 框架整合详解
- Java学习要点
- Spring MVC - 上傳圖片, JSON数据交互 ,RESTful 支持
- 关于DecimalFormat用法详解
- (java)Count Primes
- Spring学习笔记---1-Spring基础介绍
- Spring学习总结
- Java调试
- java开发记录
- Java动态代理(jdk代理和cglib代理)
- Java -- 内存机制
- 使用gradle做第一个java项目
- (java)Valid Palindrome
- javaweb学习总结(一):Servlet开发(一)
- 对JavaEE中session的理解
- Java-回调
- 初步了解 Java类加载子系统
- 使用Java抓取网页中所有的链接
- Spring包详解
- Java EE V7.0学习笔记-JBoss Tools 4.3.0.Final安装失败