Object、String、StringBuffer
一、Object
Java API
就是 JDK
中提供给我们使用的类,这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。
Object
类是 Java
语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。
1.1、equals方法
方法摘要 | 指示某个对象是否与此对象“相等” |
---|---|
boolean | equals(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方法
方法摘要 | 返回该对象的字符串表示 |
---|---|
String | toString() |
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方法,建立了字符串自己的判断相同的依据(通过字符串对象中的字符来判断)
s3
和 s4
的创建方式有什么不同呢?
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();
注意:append
、delete
、insert
、replace
、reverse
方法调用后,返回值都是当前对象自己,所以说,StringBuffer
它可以改变字符序列的长度和内容
四、StringBuilder类
此类提供一个与 StringBuffer
兼容的 API
,但不保证同步。该类被设计用作 StringBuffer
的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer
要快。
博主的所有博客目录如下:博客文章目录汇总
Java面试部分的博客目录如下:Java笔试面试目录
转载请标明出处,原文地址:https://blog.csdn.net/weixin_41835916 如果觉得本文对您有帮助,请点击顶支持一下,您的支持是我写作最大的动力,谢谢。