学习内容:
1.equals()方法:
默认的方法是用来比较对象是否是同一对象,可以重写方法来实现不同功能
public class Person { String name; int age; public Person(String name,int age) { this.name = name; this.age =age; } public boolean equals(Object obj) {//重写父类equals方法 if (obj== null) { return false; } if(this==obj) { return true; } if(obj instanceof Person) { Person p = (Person)obj; return(this.age==p.age); } return false; } } public class Test { public static void main(String[] args) { Person p1 = new Person("李四",30); Person p2 = new Person("张三",30); boolean b = p1.equals(p2); if(b) { System.out.println("两人年龄相同"); }else { System.out.println("两人年龄不同"); } }
2.toString()方法
toString()方法默认返回对象物理地址,同样也可以重写
public Test{ public static void main(String[] args) { Person p1 = new Person("李四",30); Person p2 = new Person("张三",30); String s = p1.toString(); System.out.println(s); System.out.println(p1);//默认调用toString } } public class Person { String name; int age; public Person(String name,int age) { this.name = name; this.age =age; } public String toString() {//重写toString return name+age; } }
3.String
String不属于基本数据类型,其本质是一个char类型的数组
public class Test1 { public static void main(String[] args) { //String te = new String("张三"); String te = "张三"; System.out.println(te.hashCode()); //String本质上是一个不可改变的字符数组 te = "李四";//本质上是开辟了一个新的char数组来存放李四 System.out.println(te.hashCode()); //两个te的hashcode不同 } }
String解码输出:
public class Test { public static void main(String[] args) { byte[] b = {97,98,99,100};//正数 ASCII码 负数根据默认的GBK码,两个字节代表一个汉字 String s = new String(b); System.out.println(s.toString());//byte解码转为字符 String s2 = new String(b,0,3);//要解码的数组,开始索引值,解码长度 System.out.println(s2); char[] c = {'看','门','狗'}; String s3 = new String(c);//执行字符拼接 System.out.println(s3); } }
String常用方法:
public class Test { public static void main(String[] args) { String s = "武则天"; int l = s.length(); System.out.println(l); String s2 = s.substring(0, 1);//截取指定索引值围内的字符串,左开右闭,注意,下标基1,(0,1)就是获取第一个字符 System.out.println(s2); String s3 = s.substring(2);//截取索引值2开始的字符串 System.out.println(s3); System.out.println(s.startsWith("武"));//判断以...开头 System.out.println(s.endsWith("天"));//判断以...结尾 String s4 = "abc"; System.out.println(s4.toUpperCase());//转为大写 System.out.println(s.contains("武"));//判断是否包含指定字符串 System.out.println(s.indexOf("武"));//返回指定字符串在调用字符串出现的索引值,没有返回-1 byte[] ba = s.getBytes();//转为字节数组 char[] cs = s.toCharArray();//转为字符数组 for(int i=0;i<ba.length;i++) { System.out.print(ba[i]+" "); } for(int j=0;j<cs.length;j++) { System.out.print(cs[j]+" "); } String t1 = "who"; String t2 = "WHO"; System.out.println(t1.equals(t2));//区分大写小写,返回false System.out.println(t1.equalsIgnoreCase(t2));//忽略大小写,返回true } }
4.StringBuffer与StringBuilder
区别:StringBuffer线程安全(有同步),StringBuilder线程不安全(无同步),StringBuilder因为无同步,所以速度更快。
public class Test { public static void main(String[] args) { //可变长度字符串,有冗余长度 StringBuffer sb = new StringBuffer(); sb.append("i").append("am").append("god"); sb.insert(4, "hello");//在第四个字符位置后插入字符串 sb.delete(4,9 );//删除第5-9字符,左开右闭 sb.replace(1, 2,"who");//替换 //sb.reverse();//反转 //String tr = sb.toString();//转为字符串 sb.append(true); System.out.println(sb); } }
5.char基本类型的特性及用法
char存储的字符其本质是ASCII码对应的数字,在用System.out.print输出时却是字符串,因为默认调用了toString方法
而输出两个char相加时则输出的数字,利用这一特性,我们可以实现字母大小写的判断或者输出大小写字母。
(1)大小写转换
class Test{ String s = abcDEF; char[] c = s.toCharArray(); for(int i=0;i<c.length;i++) { if(c[i]>='A'&&c[i]<='Z') { c[i]+=32; }else if(c[i]>='a'&&c[i]<='z') { c[i]-=32; } System.out.print(c[i]+""); }
(2)输出大写或小写字母表
public class Print { public void output(int x) { char A = 'A'; char a = 'a'; if(x==1) { for(int i=0;i<26;i++) { System.out.print(A+" "); A++; } } if(x==2) { for(int i=0;i<26;i++) { System.out.print(a+" "); a++; } } } }