[2014-07-18]JAVA笔记_Object类、String类
2014-07-18 16:14
501 查看
1. java.lang.Object 类。java.lang 包在使用的时候无需显式导入,编译时由编译器自动导入。
2. API(Application Programming Interface),应用编程接口。
3. equals() 方法解析
Object中的equals()方法源码
总结:对于 String 对象的相等性判断来说,请使用 equals() 方法,而不要使用 ==。
4. String 是常量,其对象一旦创建完毕就无法改变。当使用+拼接字符串时,会生成新的String 对象,而不是向原有的String 对象追加内容。
5. String Pool (字符串池):
String str="aaa"(采用字面值方式赋值);
这句话完成两步:1)查找 String Pool 中是否存在“aaa”这个对象,如果不存在则在String Pool 中创建一个“aaa” 对象,然后将String Pool中的这个“aaa”对象的地址返回来,赋给引用变量str,这样str 会指向 String Poll 中的这个 “aaa” 字符串对象。
2)如果存在,则不创建任何对象,直接将 String Pool中的这个“aaa” 对象的地址返回来,赋给 str 引用。
String str = new String("aaa"); (采用 new 关键字方式赋值)
1)首先在 String Pool 中查找有没有“aaa”这个字符串对象,如果有,则不在 String Pool 中再去创建“aaa”这个对象了,直接在堆中(heap)中创建一个“aaa”字符串对象,然后将堆中的这个“aaa” 对象的地址返回来,赋给 str 引用,导致 str 指向了堆中创建的这个“aaa” 字符串对象。
2)如果没有,则首先在 String Pool 中创建一个“aaa” 对象,然后再在堆中(heap)创建一个“aaa”对象,然后将堆中的这个“aaa”对象的地址返回来,赋给 str 引用,导致 str 指向了堆中所创建的这个“aaa”对象。
public class ObjectTest2{
public static void main(String args[]){
Object object = new Object();
Object object2 = new Object();
System.out.println(object == object2);
System.out.println("------------------------------");
String str = new String("aaa");
String str2 = new String("aaa");
System.out.println(str == str2);
System.out.println("------------------------------");
String str3 = "bbb";
String str4 = "bbb";
System.out.println(str3 == str4);
System.out.println("------------------------------");
String str5 = new String("ccc");
String str6 = "ccc";
System.out.println(str5 == str6);
System.out.println("------------------------------");
String s = "hello";
String s1 = "hel";
String s2 = "lo";
System.out.println(s == s1 + s2); //查看第4点。如果用+号来实现String的串接时:1)仅当+号两边均为字符串常量时,才将其+后的结果当做字符串常量,且该结果直接放入String Pool。
System.out.println("------------------------------");
System.out.println(s == "hel" + "lo"); //两个常量相加拼接,结果是true。例如3+5
System.out.println(s == ("hel" + s2)); //常量跟变量拼接,编译器会认为生成一个新的对象,结果是false。不同JVM实现方式不同,不必深究
System.out.println("hel" + s2);
System.out.println("100" + 200); //凡是跟字符串执行拼接操作,都会将非字符串变量或常量转换成字符串,然后拼在一起。
System.out.println(s == ("hel" + s2).intern()); //只要调用intern()方法就会返回池中的引用
System.out.println(true + false); //Erro
System.out.println("true" + false); //会将Boolean类型转为字符串,然后拼接
}
}
参考:http://hi.baidu.com/hannick/item/f7b4e7ece6ddcb2b5a7cfb24
http://blog.sina.com.cn/s/blog_5203f6ce0100tiux.html
2. API(Application Programming Interface),应用编程接口。
//Object class public class ObjectTest{ public static void main(String args[]){ Object object = new Object(); //调用object构造方法 System.out.println(object); //打印object引用 System.out.println(object.toString()); //打印引用所指向对象的toString()方法的返回值 } }当打印引用时,实际上会打印出引用所指向对象的 toString() 方法的返回值,因为每个类都直接或间接地继承自 Object , 而 Object 类中定义了 toString(),因此每个类都会有 toString() 方法。
3. equals() 方法解析
//Object类中equals()源码解析 public class StringTest{ public static void main(String args[]){ String str = new String("aa"); String str2 = new String("aa"); System.out.println(str.equals(str2)); //String中的equals()方法。重写Object中的equals()方法 System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~"); String str3 = "aa"; String str4 = "aa"; System.out.println(str3.equals(str4)); System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~"); Object object = new Object(); Object object2 = new Object(); System.out.println(object.equals(object2)); //Object中equals()方法是判断调用 equals() 方法的引用与传进来的引用是否一致。 System.out.println(object.equals(object)); System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~"); } }
Object中的equals()方法源码
public boolean equals(Object obj) { return (this == obj); //当前对象与传进来的引用是否相同 }Object的equals()总结:equals()方法,该方法定义在Object 类当中,因此java中的每个类都具有此方法,对于 Object 类的 equals() 方法来说,它是判断调用 equals() 方法的引用与传进来的引用是否一致,即这两个引用是否指向的是同一个对象。对于Object 类的 equals() 方法来说,它等价于 ==。
//String中的 equals() 方法源码 public boolean equals(Object anObject) { if (this == anObject) { //如果引用相同返回true return true; } if (anObject instanceof String) { //判断当前参数是否是一个字符串实例 String anotherString = (String) anObject; //向下类型转换 int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { //比较字符串内容是否完全相同 if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }String的equals()总结:对于 String 类的 equals() 方法来说,它是判断当前字符串与传进来的字符串的内容是否一致。
总结:对于 String 对象的相等性判断来说,请使用 equals() 方法,而不要使用 ==。
4. String 是常量,其对象一旦创建完毕就无法改变。当使用+拼接字符串时,会生成新的String 对象,而不是向原有的String 对象追加内容。
5. String Pool (字符串池):
String str="aaa"(采用字面值方式赋值);
这句话完成两步:1)查找 String Pool 中是否存在“aaa”这个对象,如果不存在则在String Pool 中创建一个“aaa” 对象,然后将String Pool中的这个“aaa”对象的地址返回来,赋给引用变量str,这样str 会指向 String Poll 中的这个 “aaa” 字符串对象。
2)如果存在,则不创建任何对象,直接将 String Pool中的这个“aaa” 对象的地址返回来,赋给 str 引用。
String str = new String("aaa"); (采用 new 关键字方式赋值)
1)首先在 String Pool 中查找有没有“aaa”这个字符串对象,如果有,则不在 String Pool 中再去创建“aaa”这个对象了,直接在堆中(heap)中创建一个“aaa”字符串对象,然后将堆中的这个“aaa” 对象的地址返回来,赋给 str 引用,导致 str 指向了堆中创建的这个“aaa” 字符串对象。
2)如果没有,则首先在 String Pool 中创建一个“aaa” 对象,然后再在堆中(heap)创建一个“aaa”对象,然后将堆中的这个“aaa”对象的地址返回来,赋给 str 引用,导致 str 指向了堆中所创建的这个“aaa”对象。
public class ObjectTest2{
public static void main(String args[]){
Object object = new Object();
Object object2 = new Object();
System.out.println(object == object2);
System.out.println("------------------------------");
String str = new String("aaa");
String str2 = new String("aaa");
System.out.println(str == str2);
System.out.println("------------------------------");
String str3 = "bbb";
String str4 = "bbb";
System.out.println(str3 == str4);
System.out.println("------------------------------");
String str5 = new String("ccc");
String str6 = "ccc";
System.out.println(str5 == str6);
System.out.println("------------------------------");
String s = "hello";
String s1 = "hel";
String s2 = "lo";
System.out.println(s == s1 + s2); //查看第4点。如果用+号来实现String的串接时:1)仅当+号两边均为字符串常量时,才将其+后的结果当做字符串常量,且该结果直接放入String Pool。
System.out.println("------------------------------");
System.out.println(s == "hel" + "lo"); //两个常量相加拼接,结果是true。例如3+5
System.out.println(s == ("hel" + s2)); //常量跟变量拼接,编译器会认为生成一个新的对象,结果是false。不同JVM实现方式不同,不必深究
System.out.println("hel" + s2);
System.out.println("100" + 200); //凡是跟字符串执行拼接操作,都会将非字符串变量或常量转换成字符串,然后拼在一起。
System.out.println(s == ("hel" + s2).intern()); //只要调用intern()方法就会返回池中的引用
System.out.println(true + false); //Erro
System.out.println("true" + false); //会将Boolean类型转为字符串,然后拼接
}
}
参考:http://hi.baidu.com/hannick/item/f7b4e7ece6ddcb2b5a7cfb24
http://blog.sina.com.cn/s/blog_5203f6ce0100tiux.html
相关文章推荐
- java笔记 chapter6 Object类,String类,正则表达式
- 黑马程序员--Java基础学习笔记【Object类、String类】
- Java学习笔记---16.面向对象编程11-Java多态性,instanceof及Object类
- 多态Object类toString方法学习笔记ObjectDemo.java
- Java菜鸟学习笔记--面向对象篇(十六):Object类方法
- 黑马程序员_java基础笔记(05)...String类
- NO8.java笔记【面向对象、抽象类、abstract、接口、interface、多态 、内部类、匿名内部类、异常、Object类】
- java学习笔记(十)----String类和StringBuffer类
- 【java初学笔记3】马士兵-java-面向对象-34->36-Object类的问题
- Java笔记:String类
- Java笔记:与系统交互、系统相关的类,Object类
- Java笔记——String类(01)
- Java笔记(七) Object类与对象转型
- 【Java学习笔记】Day 1 String类的学习及堆栈的若干问题 (待整理)
- Java基础笔记05-字符串处理(String类常用用法)
- Java菜鸟学习笔记--面向对象篇(十六):Object类方法
- Java学习笔记---8.面向对象编程03-String类的重点应用
- java学习笔记---String类
- java基础学习笔记(一)Object类
- java学习笔记(六)——String类的常用方法