Object类和String类
Object类
Object类是Java语言中的根类,即所有类的父类。
equals方法
返回值类型为:boolean类型
用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。
例子:
package com.oricle.object; public class Person extends Object{ private String name; private int age; public Person(){ } public Person( String name,int age){ this.age=age; this.name=name; } //复写父类的equals方法,实现自己的比较方式 public boolean equals(Object obj) { //判断对象是否为空 if(obj ==null){ return false; } //判断当前调用equals方法的对象和传递进来的对象是否是同一个 if(obj ==this){ return true; } //判断传递进来的对象是否是Person类型 if(obj instanceof Person){ //将obj向下转型为Perosn引用,访问其属性 Person p=(Person)obj; return this.age==p.age; } return false; } }
测试类:
package com.oricle.object; import java.util.ArrayList; public class Demo01 { public static void main(String[] args) { Person p1=new Person("江小鱼",3); Person p2=new Person("花无缺",3); System.out.println(p1==p2);//判断两个对象地址相等 System.out.println(p1.equals(p2));//重写后判断内容相等 } }
注意:在复写Object中的equals方法时,一定要注意public boolean equals(Object obj)的参数是Object类型,在调用对象的属性时,一定要进行类型转换,在转换之前必须进行类型判断。
toString方法
返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。
由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。如下:
package com.oricle.object; public class Person extends Object{ private String name; private int age; public Person(){ } public Person( String name,int age){ this.age=age; this.name=name; } //复写父类的equals方法,实现自己的比较方式 public boolean equals(Object obj) { //判断对象是否为空 if(obj ==null){ return false; } //判断当前调用equals方法的对象和传递进来的对象是否是同一个 if(obj ==this){ return true; } //判断传递进来的对象是否是Person类型 if(obj instanceof Person){ //将obj向下转型为Perosn引用,访问其属性 Person p=(Person)obj; return this.age==p.age; } return false; } //重写toString方法 public String toString() { return "name:"+name; } }
测试类:
package com.oricle.object; import java.util.ArrayList; public class Demo01 { public static void main(String[] args) { Person p1=new Person("江小鱼",3); Person p2=new Person("花无缺",3); System.out.println(p1==p2); System.out.println(p1.equals(p2)); //重写toString方法 System.out.println(p1.toString()); } }
结果如下:
String类
构造方法
把字节数组作为对象的内容
package com.oricle.String; public class Gouzao { public static void main(String[] args) { //48为0,97为a,65为A byte[] bytes={ 97,98,99,100 }; String str =new String (bytes); String str2 =new String (bytes,1,2);//创建String对象,把一部分数组元素作为字符串的内容,
//参数offset为数组元素的起始索引位置,参数length为要几个元素
System.out.println(str);
System.out.println(str2);
}
}
结果:
创建String对象,把字符串数组元素作为字符串的内容
char[] chs = new char[]{'a','b','c','d','e'}; String s4 = new String(chs); //创建String对象,把数组元素作为字符串的内容 String s5 = new String(chs, 0, 3);//创建String对象,把一部分数组元素作为字符串的内容,
//参数offset为数组元素的起始索引位置,参数count为要几个元素 System.out.println(s4); System.out.println(s5);
结果:
创建String对象str,字符串内容为sre,判断是否与已存在字符串ss相等,
String ss="sre"; String str=new String("sre"); System.out.println(ss.equals(str));
结果为true,String类进堆,优先创建内存,然后调用内容相同已经有的字符串地址,不会再开新的内存,节省空间
String类中的方法查找
package com.oricle.String1; public class Demo1 { public static void main(String[] args) { // TODO Auto-generated method stub char[] ch={'a','b','c','d','e'}; String str=new String(ch); System.out.println(str); int len=str.length(); System.out.println(len); //截取 String s1=str.substring(2);//从起始位置一直截取到最后 System.out.println(s1); //总起始位置截取到结束位置(包头不包尾,顺序不能乱) System.out.println(str.substring(2, 4)); //检索开头字母 String st="IloveJava"; String s2="Il"; String s3="Java"; System.out.println(st.startsWith(s2));//开头 System.out.println(st.endsWith(s3));//结尾 //判断字符串中是否包含子字符串 String s4="i love java java"; String s5="java"; System.out.println(s4.contains(s5)); //indexof 如果没有该字符串则返回-1 System.out.println(s4.indexOf(s5)); //将字符串转成字节/字符数组 String s6="你是人则很难"; /*byte[] b1=s6 .getBytes(); for(int i=0;i<b1.length;i++){ System.out.print(b1[i]+""); } char[]c1=s6.toCharArray(); for(int i=0;i<c1.length;i++){ System.out.println(c1[i]+""); }*/ for(int i=0;i<s6.length();i++){ byte[] b1=s6 .getBytes(); System.out.print(b1[i]+""); char[]c1=s6.toCharArray(); System.out.println(c1[i]+""); } //判断字符串内容是否相同 String s8="Oricle"; String s9="oricle"; System.out.println(s8.equals(s9)); System.out.println(s8.equalsIgnoreCase(s9)); //tostring System.out.println(s8.toString()); //tolowercase System.out.println(s8.toLowerCase()); //touppercase System.out.println(s9.toUpperCase()); } }
练习题目:
package com.oricle.String1; public class Demo1 { public static void main(String[] args) { // TODO Auto-generated method stub getnum("ORIclee12345"); getword("fainlFAF"); getci(); } //1.获取指定字符串中,大写字母、小写字母、数字的个数。 public static void getnum(String str){ int big=0, small=0, number=0; // String s10="ORIcle1234"; // char[]c2=s10.toCharArray(); for(int i=0;i<str.length();i++){ char c=str.charAt(i); // System.out.println(c); if (c>='A' && c<='Z') { big++; } else if (c>='a' && c<='z') { small++; } else if (c>='0' && c<='9') { number++; } } System.out.println("大写字母个数:"+big); System.out.println("小写字母个数:"+small); System.out.println("数字个数:"+number); } //将字符串中,第一个字母转换成大写,其他字母转换成小写,并打印改变后的字符串 public static void getword(String str){ String head=str.substring(0,1); String body=str.substring(1); String neww=head.toUpperCase()+body.toLowerCase(); System.out.println(neww); } //查询大字符串中,出现指定小字符串的次数。如“hellojava,nihaojava,javazhenbang”中查询出现“java”的次数。 public static void getci(){ String s1="hellojava,nihaojava,javazhenbang"; String s2="java"; int count=0;//出现次数 int index=-1;//出现位置下标 while((index=s1.indexOf(s2)) != -1){ count++; s1=s1.substring(index+s2.length()); System.out.println(s1); } System.out.println(count); } }