Object
Object类是所有类的终极父类。 任何一个类都继承了Object类。
- toString(); 返回该对象的字符串表示。 返回一个字符串用于描述该对象的。
重写toString之后,我们直接输出一个对象的时候,就会输出符合我们所需求的格 式数据。
2.equals(Object obj) 用于比较两个对象的内存地址,判断两个对象是否为同一个对象。
3.hashCode() 返回该对象的哈希码值(大家可以把哈希码就 理解成是对象的内存地址)
java中的规范:一般我们重写了一个类的equals方法,我们都会重写它的hashCode方法。
class Student{
public String name;
public String cardId;
public int age;
public Student(){}
public Student(String name,int age,String cardId){
this.age = age;
this.name = name;
this.cardId = cardId;
}
@Override
public String toString() {
return this.name+"---"+this.age;
}
@Override
public boolean equals(Object obj) {
Student s = (Student)obj;
return s.cardId == this.cardId;
}
@Override
public int hashCode() {
return super.hashCode();
}
}
public class Test {
public static void main(String[] args) throws Exception {
Student s1 = new Student("小张", 22, "5");
Student s2 = new Student("张三", 22, "5");
System.out.println(s1.equals(s2));//false
System.out.println(s1);//小张---20
}
}
字符串
public class Test {
public static void main(String[] args) throws Exception {
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
String str4 = new String("hello");
System.out.println("str1==str2?"+(str1==str2)); // true
System.out.println("str2==str3?"+(str2==str3)); //false
System.out.println("str3==str4?"+(str3==str4)); // false
System.out.println("str3.equals(str2)?"+(str3.equals(str4))); //true
}
}
声明一个字符串与new String()的区别?
申明一个字符串时(如上图s2)建立1个或0个对象,new一个对象(如上图s2)会建立2个或1个对象。java为了防止值相等的String建立过多的情况,搞了一个字符串常量池。当你申明一个字符串时会先去字符串常量池中查找是否存在相同值的字符串,没有则在字符串常量池中分配空间存放值,有则不再建立。当你new 一个字符串时,首先去字符串常量池中查看是否存在相同值的字符串,如果没有则在字符串常量池中分配空间,之后会在堆分配的空间中存存储字符串常量池中分配空间。
构造函数
- String() 创建一个空内容 的字符串对象。
- String(byte[] bytes) 使用一个字节数组构建一个字符串对象
- String(byte[] bytes, int offset, int length)
bytes : 要解码的数组
offset: 指定从数组中那个索引值开始解码。
length: 要解码多个元素。 - String(char[] value) 使用一个字符数组构建一个字符串。
- String(char[] value, int offset, int count) 使用一个字符数组构建一个字符串, 并指定开始的索引值,与使用字符个数。
- String(int[] codePoints,int offset,int count)
- String(String original)
获取方法
- length() 获取字符串的长度
- charAt(int index) 获取特定位置的字符 (角标越界)
- indexOf(String str) 查找子串第一次出现的索引值,如果子串没有出现 在字符串中,那么则返回-1表示。
- lastIndexOf(String str) 查找子串最后一次出现的索引值 , 如果子串没有出现 在字符串中,那么则返回-1表示
判断方法
- endsWith(String str) 是否以指定字符结束
- isEmpty()是否长度为0 如:“” null V1.6
- contains(CharSequences) 是否包含指定序列 应用:搜索
- equals(Object anObject) 是否相等
- equalsIgnoreCase(String anotherString) 忽略大小写是否相等
转换方法
- toCharArray() 将字符串转换为字符数组
- getBytes(); 将字符串转换为字节数组
其他方法
- replace(String oldChar, String newChar) 替换
- split(String regex) 切割
- substring(int beginIndex) 指定开始 的索引值截取子串
- substring(int beginIndex, int endIndex)指定开始 与结束的索引值截取子串
- toUpperCase() 转大写
- toLowerCase() 转小写
- trim() 去除字符串首尾的空格
StringBuffer与StringBuilder
字符串特点:字符串是常量,当字符串的内容一旦发生了变化,那么马上会创建一个新的对象。
注意: 字符串的内容不适宜频繁修改,因为一旦修改马上就会创建一个新的对象。
如果需要频繁修改字符串 的内容,建议使用字符串缓冲 类(StringBuffer)。
tringBuffer 其实就是一个存储字符的容器。
使用Stringbuffer无参的构造函数创建一个对象时默认的初始容量是16。 字符数组的长度不够使用则自动增长1倍.
增加
- append(boolean b) 可以添加任意类型 的数据到容器中
- insert(int offset, boolean b) 指定插入的索引值,插入对应 的内容。
删除
- delete(int start, int end) 根据指定的开始与结束的索引值删除对应的内容
- deleteCharAt(int index) 根据指定 的索引值删除一个字符。
修改
- replace(int start, int end, String str) 根据指定 的开始与结束索引值替代成指定的内容。
- reverse() 翻转字符串缓冲类的内容。
- setCharAt(int index, char ch) 把指定索引值的字符替换指定的字符。
- substring(int start, int end) 根据指定的索引值截取子串。
- ensureCapacity(int minimumCapacity) 指定StringBuffer内部的字符数组长度的。
查看
- indexOf(String str, int fromIndex) 查找指定的字符串第一次出现的索引值,并且指定开始查找的位置。
- lastIndexOf(String str)
- capacity() 查看当前字符数组的长度。
- length()
- charAt(int index)
- toString() 把字符串缓冲类的内容转成字符串返回。
StringBuffer 与 StringBuilder的相同处与不同处:
相同点:
1. 两个类都是字符串缓冲类。
2. 两个类的方法都是一致的。
不同点:
1. StringBuffer是线程安全的,操作效率低 ,StringBuilder是线程非安全的,操作效率高。
2. StringBuffer是jdk1.0出现 的,StringBuilder 是jdk1.5的时候出现的。