Java基础系列(十二)Object、String、StringBuffer

一、Object

        Java API 就是 JDK 中提供给我们使用的类,这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。
        Object 类是 Java 语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。

1.1、equals方法

方法摘要指示某个对象是否与此对象“相等”
booleanequals(Object)

        equals 方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。Object 类中的 equals 方法内部使用的就是 == 比较运算符。
        在开发中要比较两个对象是否相同,经常会根据对象中的属性值进行比较,也就是在开发经常需要子类重写 equals 方法根据对象的属性值进行比较。如下代码演示:

/*
 	描述人这个类,并定义功能根据年龄判断是否是同龄人
 	由于要根据指定类的属性进行比较,这时只要覆盖 Object 中的 equals 方法
 	在方法体中根据类的属性值进行比较
 */
class Person extends Object{
	int age ;
	//复写父类的 equals 方法,实现自己的比较方式
	public boolean equals(Object obj) {
		//判断当前调用 equals 方法的对象和传递进来的对象是否是同一个
		if(this == obj){
			return true;
		}
		//判断传递进来的对象是否是 Person 类型
		if(!(obj instanceof Person)){
			return false;
		}
		//将 obj 向下转型为 Perosn 引用,访问其属性
		Person p = (Person)obj;
		return this.age == p.age;
	}
}

注意:在复写 Object 中的 equals 方法时,一定要注意 public boolean equals(Object obj) 的参数是 Object 类型,在调用对象的属性时,一定要进行类型转换,在转换之前必须进行类型判断。

1.2、toString方法

方法摘要返回该对象的字符串表示
StringtoString()

        toString 方法返回该对象的字符串表示,其实该字符串内容就是:对象的类型+@+内存地址值。由于 toString 方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。

二、String

        字符串是常量;它们的值在创建之后不能更改,这是什么意思呢?其实就是说一旦这个字符串确定了,那么就会在内存区域中就生成了这个字符串。字符串本身不能改变,但str变量中记录的地址值是可以改变的。

String s3 = "abc";
String s4 = new String("abc");
System.out.println(s3==s4);//false
System.out.println(s3.equals(s4));//true,
//因为String重写了equals方法,建立了字符串自己的判断相同的依据(通过字符串对象中的字符来判断)

s3s4 的创建方式有什么不同呢?
s3 创建,在内存中只有一个对象。这个对象在字符串常量池中
s4 创建,在内存中有两个对象。一个 new 的对象在堆中,一个字符串本身对象,在字符串常量池中

这里写图片描述

2.2、String类构造方法

方法名称说明
String()初始化一个新创建的 String 对象,使其表示一个空字符序列
String(byte[] bytes)通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String
String(byte[] bytes, int offset, int length)通过使用平台默认字符集解码指定的 byte 子数组,构造一个新的 String
String(char[] value)分配一个新的 String,使其表示字符数组参数中当前包含的字符序列
String(char[] value, int offset, int count)分配一个新的 String,它包含取自字符数组参数一个子数组的字符
String(String original)初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列

栗子🌰:

// 创建 String 对象,字符串中没有内容
String s1 = new String(); 

byte[] bys = new byte[]{97,98,99,100};
// 创建 String 对象,把数组元素作为字符串的内容
String s2 = new String(bys); 
// 创建 String 对象,把一部分数组元素作为字符串的内容,参数 offset 为数组元素的起始索引位置,参数 length 为要几个元素
String s3 = new String(bys, 1, 3); 

char[] chs = new char[]{’a’,’b’,’c’,’d’,’e’};
// 创建 String 对象,把数组元素作为字符串的内容
String s4 = new String(chs); 
//创建 String 对象,把一部分数组元素作为字符串的内容,参数 offset 为数组元素的起始索引位置,参数 count 为要几个元素
String s5 = new String(chs, 0, 3);

// 创建 String 对象,字符串内容为 abc
String s6 = new String(“abc”); 

2.3、String类方法查找

(1)字符串中有多少个字符

方法名称说明
int length()返回此字符串的长度
String str = "abcde";
int len = str.length();
System.out.println("len=" + len);

(2)获取部分字符串

方法名称说明
String substring(int beginIndex)返回一个新的字符串,它是此字符串的一个子字符串
String substring(int beiinIndex, int endIndex)返回一个新的字符串,它是此字符串的一个子字符串
String str = "abcde";
// 返回一个新字符串,内容为指定位置开始到字符串末尾的所有字符
String s1 = str.substring(1); 
// 返回一个新字符串,内容为指定位置开始到指定位置结束所有字符
String s2 = str.substring(2, 4);
System.out.println("str="+str);
System.out.println("s1="+s1);
System.out.println("s2="+s2);

(3)字符串是否以指定字符串开头

方法名称说明
boolean startsWith(Sting prefix)测试此字符串是否以指定的前缀开始
boolean endsWith(String suffix)测试此字符串是否以指定的后缀结束
String str = "StringDemo.java";
// 判断是否以给定字符串开头
boolean b1 = str.startsWith("Demo");
boolean b2 = str.startsWith("String");
// 判断是否以给定字符串结尾
boolean b3 = str.endsWith("java");

(4)字符串中是否包含另一个字符串

方法名称说明
boolean contains(CharSequence s)当且仅当此字符串包含指定的 char 值序列时,返回 true
int indexOf(String str)返回指定字符串在此字符串中第一次出现处的索引
String str = "abcde";
// 判断是否包含指定字符串,包含则返回第一次出现该字符串的索引,不包含则返回 -1
int index = str.indexOf(“bcd”); 
// 判断是否包含指定字符串,包含返回 true,不包含返回 false
boolean b2 = str.contains("bcd");

(5)将字符串转成一个字符数组。或者字节数组

方法名称说明
byte[] getBytes()使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中
char[] toCharArray()将此字符串转换为一个新的字符数组
String str = "abcde";
char[] chs = str.toCharArray();
byte[] bytes = str.getBytes();

(6)判断两个字符串中的内容是否相同

方法名称说明
boolean equals(objectt anObject)将此字符串与指定的对象比较
boolean quealsIgnoreCase(String anotherString)将此 String 与另一个 String 比较,不考虑大小写
String str = "abcde";
String str2 = "abcde";
String str3 = "hello";
boolean b1 = str.equals(str2);
boolean b2 = str.equals(str3);

(7)获取该字符串对象中的内容

String str = new String("hello");
System.out.println( str.toString() );
System.out.pintln( str );

直接打印引用类型变量时,默认调用该类型进行重写后的 toString 方法

三、StringBuffer

StringBuffer 是个字符串的缓冲区,即就是它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作。
StringBuffer 的方法使用

方法名称说明
Stringbuffer append(String str)将指定的字符串追加到此字符序列
StringBuffer delete(int start, int end))移除此序列的子字符串中的字符
StringBuffer insert(int offset, String str)将字符串插入此字符序列中
StringBuffer replace(int start, int end, String str)使用给定的 String 中的字符替换此序列的字符串中的字符
StringBuffer reverse()将此字符序列用其反转形式取代
String toString()返回此字符序列中数据的字符串表示形式
// 创建一个字符串缓冲区对象。用于存储数据。
StringBuffer sb = new StringBuffer();
// 添加字符串
sb.append("haha"); 
// 在指定位置插入
sb.insert(2, "it");
// 删除
sb.delete(1, 4);
// 替换指定范围内的内容
sb.replace(1, 4, "cast");
String str = sb.toString();

注意:appenddeleteinsertreplacereverse 方法调用后,返回值都是当前对象自己,所以说,StringBuffer 它可以改变字符序列的长度和内容

四、StringBuilder类

此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。


博主的所有博客目录如下:博客文章目录汇总
Java面试部分的博客目录如下:Java笔试面试目录

转载请标明出处,原文地址:https://blog.csdn.net/weixin_41835916 如果觉得本文对您有帮助,请点击支持一下,您的支持是我写作最大的动力,谢谢。
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北极星小王子

你的鼓励是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值