toString&equals

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对象引用**

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值