ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # java的API Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。所有类在创建对象的时候,最终找的父类就是Object。object类有构造方法 接口不继承object类 ## equals equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。Object类中的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类型,在调用对象的属性时,一定要进行类型转换,在转换之前必须进行类型判断。 ## toString toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。 由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。 ~~~ class Person extends Object{ int age ; //根据Person类的属性重写toString方法 public String toString() { return "Person [age=" + age + "]"; } } ~~~ # string类 查阅API中的String类的描述,发现String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。 ~~~ //演示字符串 String str = "abc"; str = "ef"; ~~~ 字符串是常量;它们的值在创建之后不能更改,这是什么意思呢?其实就是说一旦这个字符串确定了,那么就会在内存区域中就生成了这个字符串。字符串本身不能改变,但str变量中记录的地址值是可以改变的 字符串有大量的重载的构造方法。通过String类的构造方法可以完成字符串对象的创建,那么,通过使用双引号的方式创建对象与new的方式创建对象,有什么不同呢?看如下程序与图解: ~~~ 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的对象在堆中,一个字符串本身对象,在字符串常量池中 # 字符串缓冲区 StringBuffer类 StringBuffer又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容 StringBuffer是个字符串的缓冲区,即就是它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作 # StringBuilder类 StringBuilder类,它也是字符串缓冲区,StringBuilder与它和StringBuffer的有什么不同呢? 我们阅读StringBuilder的API说明发现,它也是一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。 # 总结 * Object: 它是所有类的超类,祖宗类。java中所有的类都直接或间接的继承这个类 - 方法 public String toString() 返回当前对象中的内容, 对于Object类默认操作来说,返回的对象的类型+@+内存地址值 public boolean equals(Object obj) 比较两个对象内容是否相同,对于Object类默认操作来说,比较的是地址值 * String: 字符串类,字符串是常量;它们的值在创建之后不能更改 - 方法 boolean equals(Object obj) 判断两个字符串中的内容是否相同 boolean equalsIgnoreCase(String str) 判断两个字符串中的内容是否相同, 忽略大小写 boolean contains(String str) 判断该字符串中 是否包含给定的字符串 boolean startsWith(String str) 判断该字符串 是否以给定的字符串开头 boolean endsWith(String str) 判断该字符串 是否以给定的字符串结尾 boolean isEmpty() 判断该字符串的内容是否为空的字符串 "" int length() 获取该字符串的长度 char charAt(int index) 获取该字符串中指定位置上的字符 String substring(int start) 从指定位置开始,到末尾结束,截取该字符串,返回新字符串 String substring(int start,int end) 从指定位置开始,到指定位置结束,截取该字符串,返回新字符串 int indexOf(int chr ) 获取给定的字符,在该字符串中第一次出现的位置 int indexOf(String str) 获取给定的字符串,在该字符串中第一次出现的位置 int indexOf(int chr,int fromIndex) 从指定位置开始,获取给定的字符,在该字符 byte[] getBytes() 把该字符串 转换成 字节数组 char[] toCharArray() 把该字符串 转换成 字符数组 String replace(char old,char new) 在该字符串中,将给定的旧字符,用新字符替换 String replace(String old,String new) 在该字符串中, 将给定的旧字符串,用新字符串替换 String trim() 去除字符串两端空格,中间的不会去除,返回一个新字符串 String toLowerCase() 把该字符串转换成 小写字符串 String toUpperCase() 把该字符串转换成 大写字符串 int indexOf(String str,int fromIndex) 从指定位置开始,获取给定的字符串,在该字符串中第一次出现的位置 * StringBuffer/StringBuilder: - 方法 public StringBuffer append(String str) 在原有字符串缓冲区内容基础上,在末尾追加新数据 public StringBuffer insert(int offset,String str) 在原有字符串缓冲区内容基础上,在指定位置插入新数据 public StringBuffer deleteCharAt(int index) 在原有字符串缓冲区内容基础上,删除指定位置上的字符 public StringBuffer delete(int start,int end) 在原有字符串缓冲区内容基础上,删除指定范围内的多个字符 public StringBuffer replace(int start,int end,String str)在原有字符串缓冲区内容基础上,将指定范围内的多个字符 用给定的字符串替换 public StringBuffer reverse() 将字符串缓冲区的内容 反转 "abc"----"cba" public String substring(int start) 从指定位置开始,到末尾结束,截取该字符串缓冲区,返回新字符串 public String substring(int start,int end) 从指定位置开始,到指定位置结束,截取该字符串缓冲区,返回新字符串 创建一个字符串缓冲区对象。用于存储数据。 ~~~ 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它可以改变字符序列的长度和内容