首页 > 代码库 > Java常用信息

Java常用信息

一、Equals和==运算符

代码:

public static void test() {  
   String x = "hello";  
    String y = "world";  
    String z = new String("helloworld");  
   String a = "helloworld";  
   System.out.println("x+y equals z:" + (x + y).equals(z));  
   System.out.println("a == z:" + (a == z));  
   System.out.println("x == hello:" + (x == "hello"));  
   System.out.println("a == helloworld:" + (a == "hello" + "world"));  
   System.out.println("a == x+y:" + (a == (x + y)));  
}

 结果:

    x+y equals z:true

    a == z:false

    x == hello:true

    a == helloworld:true

    a == x+y:false

     

    分析:

    1.String.equals()方法比较的是字符串的内容,所以(x + y).equals(z)为true.

    2.“==”比较的是 String 实例的引用,很明显 a 和z 并不是同一个 String 实例,所以(a == z)为false.

    3.根据常量池的知识,容易得知(x == "hello")和(a == "hello" + "world")都为true.

    (常量池指的是在编译期被确定并被保存在已编译的.class 文件中的一些数据。它包含了

    关于方法、类、接口等,当然还有字符串常量的信息。也就是所谓的持久代。)

    4.那么(a == (x + y))为什么是false呢?这点暂点有点不大清楚。初步认为是x+y是引用相加,不能放入常量池。

二、String、StringBuffer、StringBuilder的区别

1.可变与不可变

  String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。

    private final char value[];

  StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知这两种对象都是可变的。

    char[] value;

2.是否多线程安全

  String中的对象是不可变的,也就可以理解为常量,显然线程安全

  AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。

  StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的

      StringBuilder并没有对方法进行加同步锁,所以是非线程安全的

3.StringBuilder与StringBuffer共同点

  StringBuilder与StringBuffer有公共父类AbstractStringBuilder(抽象类)。

  抽象类与接口的其中一个区别是:抽象类中可以定义一些子类的公共方法,子类只需要增加新的功能,不需要重复写已经存在的方法;而接口中只是对方法的申明和常量的定义。

  StringBuilder、StringBuffer的方法都会调用AbstractStringBuilder中的公共方法,如super.append(...)。只是StringBuffer会在方法上加synchronized关键字,进行同步。

      对于三者使用的总结:

            1.如果要操作少量的数据用 = String
            2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
    3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer





本文出自 “ciyo技术分享” 博客,请务必保留此出处http://ciyorecord.blog.51cto.com/6010867/1928573

Java常用信息