java中的数据类型,可分为两类:

1.基本数据类型,也称为原始数据类型。byte,short,char,int,float,double,boolean

 它们之间的比较,应用双等号==,比较的是它们的值。

2.复合数据类型(类)

   当它们用==比较时,比较的是它们在内存中的地址。

   Java中所有的类都继承自Object这个基类,在Object中的基类中定义了一个equals的方法,初始行为是比较对象的内存地址,但是在一些类库中这个方法被覆盖了,如String,Integer,Date这些类中,有其自己的实现,而不再是比较堆放在内存中的地址了。

    对于复合数据类型之间进行equals比较,在没有复写equals方法的情况下,还是比较它们的内存地址。

3.String的比较

1 public class TestString {
2     public static void main(String[] args) {
3         String s1 = "abc";
4         String s2 = "abc";
5         System.out.println(s1==s2);
6     }
7 }

运行结果为:true。说明它们引用的是同一个对象:"abc"

4.修改上述代码

1 public class TestString {
2     public static void main(String[] args) {
3         String s1 = "abc";
4         String s2 = new String("abc");
5         System.out.println(s1==s2);
6     }
7 }

运行结果:false。说明s1,s2分别引用了两个"abc"对象。

5.字符串缓冲池

  原来程序在运行的时候,会创建一个字符串缓冲池,当使用s2="abc"这样的表达时,程序首先会在这个String缓冲池中寻找相同值的对象,在第一个程序中,s1被放到了池中,所以在s2被创建的时候,程序找到了相同值的s1,并将s2引用s1所引用的对象。

  在第二段程序中,使用了new操作符,他明白高速程序,“我要一个新的,不要旧的”,于是一个新的"abc"对象被创建在了内存中,它们值相同,但是在内存中的位置不同。真是资源浪费,明明是一样的非要分开做什么呢?

posted on 2016-05-06 15:18  Jourly  阅读(195)  评论(0编辑  收藏  举报