toString方法总结
根据Java核心技术和郝斌老师课程写的笔记。
-
所有的类都默认自动继承了Object类
-
Object类中的toString方法返回的是类的名字和该对象哈希码组成的一个字符串
-
System.out.println(类对象名);
实际输出的是该对象的toString方法所返回的字符串
-
为了实际需要,建议子类重写从父类Object继承的toString方法
Object类的equals方法
- 所有类都从Object类中继承了equals方法
- Object类中equals方法源代码如下 :
public boolean equals(Object obj){
return this == obj;
}
-
Object中equals方法是直接判断this和obj本身的值是否相等,即用来判断调用equals的对象和形参obj所引用的对象是否是同一对象。所谓同一对象就是指是内存中同一块存储单元,如果this和obj指向的是同一块内存对象,则返回true;如果this和obj指向的不是同一块内存,则返回false。
注意:即使是内容完全相等的两块不同的内存对象,也会返回false
-
如果是同一块内存,则Object中的equals方法返回true,如果是不同的内存,则返回false
何时需要重写equals方法
- 用一个类构造出来的不同内存的两个对象,如果内存中的值相等,我们一般情况下也应该认为这两个对象相等,很明显Object中的equals()无法完成这样的重任,Object中的equals()方法只有在两个对象是同一块内存时,才返回true,这时候我们就有必要重写父类Object中的equals方法
- 如果希望不同内存但相同内容的两个对象equals时返回true,则我们需要重写父类的equals方法
String类
- java.lang.String类对象表示不可修改的Unicode编码字符串;
- 在Java中双引号括起来的字符串也被当做String对象
System.out.println("abc".length()); // output: 3
System.out.println("abc".equals("abc")); // output: true
String类的equals方法
- String类已经重写了Object中的equals方法
- 例子
- 假设str1和str2都是String对象
- str.equals(str2): 是用来比较str1变量所占内存的值所指向的对象和str2变量本身所占内存的值所指向的对象的内容是否相等,Object类的equals方法是用来判断两个对象是否同一个对象
- 一定要注意 == 与 equals 的区别
String类 常量字符串用法 :
package equal;
public class TestString_1 {
public static void main(String[] args) {
String str1 = new String("china");
String str2 = new String("china");
String str3 = "china";
String str4 = "china";
System.out.println(str1.equals(str2)); // output: true
System.out.println(str1==str2); // output: false
System.out.println(str3.equals(str4)); // output: true
System.out.println(str3==str4); // output: true
System.out.println(str2==str3); // output: false
System.out.println(str2.equals(str3)); // output: t
}
}
static 和 常量字符串都是在静态数据区中存放的
String类常用方法(1)
public char charAt(int index); // 返回字符串中第index个字符
public int length(); // 返回字符串的长度
public int indexOf(String str); // 返回字符串中出现str的第一个位置
public int indexOf(String str, int fromIndex); // 返回字符串中从fromIndex开始出现str的第一 个位置
public boolean equalsIgnoreCase(String another);// 比较字符串与another是否一样(忽略大小写)
public String replace(char oldChar, char newChar);//在字符串中用newChar字符替换oldChar字符
String类常用方法(2)
public boolean startsWith(String prefix);// 判断字符串是否以prefix字符串开头
public boolean endsWith(String suffix); // 判断字符串是否以suffix字符串结尾
public String toUpperCase(); // 返回一个字符串为该字符串的大写形式
public String toLowerCase(); // 返回一个字符串为该字符串的小写形式
public String substring(int beginIndex);// 返回该字符串从beginIndex开始到结尾的子字符串
public String substring(int beginIndex, int endIndex);// 返回该字符串从beginIndex开始到 endIndex结尾的子字符串
String类常用方法(3)
- 静态重载方法
**public static String valueOf(…)**可以将基本数据类型转换为字符串,例如
public static String valueOf(double d)
public static String valueOf(int i)
方法public String[] split (String regex) 可以将一个字符串按照指定的分隔符分隔,返回分隔后的字符串数组。
StringBuffer类
由来
-
String类一旦创建就不可更改,若经常对字符串内容进行修改,则使用StringBuffer
-
如果经常对字符串内容进行修改而使用String的话,就会导致既耗空间又耗时间!
-
例子:
-
String s1 = "abcd"; String s2 = "123"; String s1 = s1 + s2;
-
StringBuffer对象的内容是可以改变的
-
因此String类中没有修改字符串的方法,但是StringBuffer类中却又大量修改字符串的方法
StringBuffer类的构造函数
public StringBuffer() // 创建一个空的没有任何字符的StringBuffer对象
public StringBuffer(int capacity) // 创建一个不带字符,但具有指定初始容量的字符串缓冲区
public StringBuffer(String str) // 创建一个StringBuffer对象,包含与str对象相同的字符序列
*** 重载方法 public StringBuffer append(…) 可以该StringBuffer 对象添加字符序列,返回添加后的该StringBuffer对象引用,例如:**
public StringBuffer append(String str)
public StringBuffer append(StringBuffer sbuf)
public StringBuffer append(char[] str)
public StringBuffer append(char[] str, int offset, int len)
public StringBuffer append(double d)
public StringBuffer append(Object obj)
* 重载方法 public StringBuffer insert(…) 可以为该StringBuffer对象在指定位置插入字符序列,返回修改后的该StringBuffer对象引用,例如:
public StringBuffer insert(int offset, String str)
public StringBuffer insert(int offset, double d)
* 方法public StringBuffer delete(int start, int end) 可以剔除从start开始到end-1为止的一段字符序列,返回修改后的该StringBuffer对象引用
*** 和String类含义类似的方法:**
public int indexOf(String str)
public int indexOf(String str, int fromIndex)
public String substring(int start)
public String substring(int start, int end)
public int length()
*** 方法public StringBuffer reverse() 用于将字符序列逆序,返回修改后的该StringBuffer对象引用**