一,java中万物皆对象,所以Object类
官方文档说明:
类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。1,equals方法
- boolean equals(Object obj); //指示其他某个对象是否与此对象“相等”。 默认是object中的比较地址值
特别地: == 与equals的区别:
== 是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值.
equals 方法是一个方法,只能比较引用数据类型,所有对象都会继承object类中的方法,equals方法和 == 比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性.
2, hashCode()
- int hashCode();//返回该对象的哈希码值
3, getClass() ;//返回此 Object 的运行时类。
4,toString()返回该对象的字符串表示。默认是getClass().getName() + ‘@’ + Integer.toHexString(hashCode())
二 ,字符串类String(细节特别多,切勿被表面欺骗了.)
官方说明:
2.1概述:
String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。例如:
String str = "abc";
等效于:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
从上面的官方说明可以总结出:
区别以下两句代码的区别
String str="abc";//这句代码的意思是在内存的常量池中有一个常量字符串"abc" 而左边的是字符串变量str,它指向该常量"abc";
String str=new String("abc");//这句代码的理解就是新创建的字符串是该参数字符串的副本.就是说常量池中先有"abc"字符串,然后复制一份给String对象,该对象的值就是"abc";
图解如下:
2.2构造函数
String类的构造函数有非常多,主要都是将其他类型的数据转换为字符串.
2.3各种功能方法
自己看API文档吧.
2.4,常见面试的坑
1,String类比较 == 与 equals 的区别
String s1="abc";
String s2="abc";
System.out.println(s1==s2);//true
System.out.println(s1.equals(s2));//true
解析如下图:
2,与第一题比较,会发现不同点
String s1=new String("abc");
String s2="abc";
System.out.println(s1==s2);//false,此处的地址值不同了.
System.out.println(s1.equals(s2));//true,equals的比较字符串的字面值
3,字符串的 + 的作用
String s1="ab";
String s2="abc";
String s3=s1+"c";//此处的底层是用stringBuffer或stringBuilder做的.
System.out.println(s3==s2);//false
System.out.println(s3.equals(s2));//true
4,与第3比较,会发现不同
String s1="a"+"b"+"c";//此处是操作常量池的,而java有常量优化机制.
String s2="abc";
System.out.println(s1==s2);//true
System.out.println(s1.equals(s2));//true
2.5,字符串的基本操作
1,字符串的遍历
String str="i love you";
for (int i = 0; i < str.length(); i++) {
System.out.print(str.charAt(i));
}
}
2,统计各种字符的出现的次数:
String str="ASDF失联飞 fdsfsf23234990#$@的机";
int big=0;
int small=0;
int num=0;
int other=0;
for (int i = 0; i < str.length(); i++) {
if(str.charAt(i)>='A'&&str.charAt(i)<='Z'){
big++;
}else if(str.charAt(i)>='a'&&str.charAt(i)<='z'){
small++;
}else if(str.charAt(i)>='0'&& str.charAt(i) <='9'){
num++;
}else{
other++;
}
}
System.out.println("大写:"+big+",小写:"+small+",数字:"+num+",其他:"+other);
3,将录入的字符串反转输出
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
char[] arr=str.toCharArray();
String str2="";
for (int i = arr.length-1; i>=0 ; i--) {
str2+=arr[i];
}
System.out.println(str2);
}
4,大串中找小串
String bigStr="i love you and you love me,so we are love eachother,let us our love forever!";
String findStr="love";
int index=0;
int count=0;
while((index=bigStr.indexOf(findStr))!=-1){
count++;
bigStr=bigStr.substring(index+findStr.length());
}
System.out.println("count:"+count);