Object类常用方法
| 方法名 | 功能说明 |
|---|---|
| public boolean equals(Object obj) | 比较两个对象的内容是否相等 |
| public final Class getClass() | 获取当前对象所属类型,返回Class对象 |
| public String toString() | 将当前对象转换成字符串 |
| protected Object clone() | 生成当前对象的一个备份,并返回这个副本 |
| public int hashCode() | 返回当前对象的散列码 |
1.equals()方法
Object类中的equals方法
public boolean equals(Object obj) {
return (this == obj);
}
Integer类中的equals方法
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
String类中的equals方法
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
① == 比较的是两个对象的地址,在Object父类中,equals 等效 ==
② 基本数据类型用==进行比较
③ Object类中的equals方法比较的也是两个对象的地址,但是在很多类中都进行了重写,重写为比较两个对象的内容,如String类,Integer类
例子1:
public static void main(String[] args) {
Integer obj1 = new Integer(5);
Integer obj2 = new Integer(15);
Integer obj3= new Integer(5);
Integer obj4 = obj2;
System.out.println("obj1与obj2比较:"+obj1.equals(obj2));//false
System.out.println("obj1与obj3比较:"+obj1.equals(obj3));
//true Integer 类对equale类进行了重写,比较两个对象的内容是否相等
System.out.println("obj2与obj4比较:"+obj2.equals(obj4));//true
System.out.println("**************************");
System.out.println("obj1与obj2比较:"+(obj1==obj2));//false地址不同
System.out.println("obj1与obj3比较:"+(obj1==obj3));//false地址不同
System.out.println("obj2与obj4比较:"+(obj2==obj4));//true,两个引用是同一个地址
}
例子2:
public static void main(String[] args) {
Integer obj1 = new Integer(5);
Integer obj2 = new Integer(15);
Integer obj3= new Integer(5);
Integer obj4 = obj2;
System.out.println("obj1与obj2比较:"+obj1.equals(obj2));//false
System.out.println("obj1与obj3比较:"+obj1.equals(obj3));
//true Integer 类对equale类进行了重写,比较两个对象的内容是否相等
System.out.println("obj2与obj4比较:"+obj2.equals(obj4));//true
System.out.println("**************************");
System.out.println("obj1与obj2比较:"+(obj1==obj2));//false地址不同
System.out.println("obj1与obj3比较:"+(obj1==obj3));//false地址不同
System.out.println("obj2与obj4比较:"+(obj2==obj4));//true,两个引用是同一个地址
}
2.toString()方法
Object类中的toString()方法用于获取对象的描述信息,方法返回包含类名和散列码的字符串。
采用一下格式
getClass().getName()+’@’+Integer.toHexString(hashCode())
3.String()类
1、String 类型概述
String类代表字符串, Java程序中的所有字符串文字(例如"abc" ) 都被实现为此类的实例。也就是说,Java程序中所有的双引号字符串,都是String 类的对象。String 类在java.lang包下,所以使用的时候不需要导包!
2、String类的特点
1.字符串不可变,它们的值在创建后不能被更改
2. 虽然String的值是不可变的,但是它们可以被共享
3.字符串效果上相当于字符数组( char[] ),但是底层原理是字节数组( byte[] )
3、创建字符串对象两种方式的区别
① 通过构造方法创建
通过new创建的字符串对象,每一次new都会申请一一个内存空间 ,虽然内容相同,但是地址值不同
②直接赋值方式创建
以“”方式给出的字符串,只要字符序列相同(顺序和大小写) ,无论在程序代码中出现次,JVM都只会建立一个 String对象,并在字符串池中维护。
例子:
//string 的三种初始化方式
String str1 = "I am string!";
String str2 = new String("I am string!");
String str3 ;
4、不同类型与字符串类型转换
str3 = "I am string";
//字符串->整型
int number = 1;
String str4 = number + "";
int number1 = 1;
String str5 = Integer.toString(number1);
//整型->字符串
String str6 ="123";
int number3 = Integer.parseInt(str6);
//浮点型-> 字符串
double number4 = 3.14;
String str7 = number4 + "";
String str8 = Double.toString(number4);
//字符串->浮点型
String str9 = "1.23";
double number5 = Double.parseDouble(str9);
5、string常用方法
| 方法 | 说明 |
|---|---|
| charAt(int index) | 返回指定下标index对应的字符 |
| concat(String str) | 连接两个字符串返回组合后的字符串 |
| endsWith(String suffix) | 判断字符是否以suffix字符串结尾,true/false |
| startWith(String suffix) | 判断字符是否以suffix字符串开头,true/false |
| equals(Object obj) | 判断两个字符串是否相等,true/false |
| indexOf(String suffix) | 返回子串suffix对应的下标 |
| lastIndexOf(String suffx) | 返回子串suffix在字符串中最后一次出现的位置 |
| length() | 返回字符串的长度 |
| matches(String regex) | 判断字符串是否与正则表达式匹配 |
| replace(char oldChar, char newChar) | 字符串中旧的子串oldChar替换成新的子串newChar |
| split(String regex) | 按regex对字符串进行拆分,返回字符串数组 |
| substring(int beginIndex, int endIndex) | 截取指示下标范围内的子串,返回子字符串[beginIndex , endIndex) |
| trim() | 去字符串前和后的空格 |
Demo:
package com.hyg.StringDemo;
public class StringReverseDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(reverse("qwertgyhju"));
}
public static String reverse(String string){
String result = "";
for(int i = string.length()-1;i>=0;i--){
result = result+string.charAt(i);
}
return result;
}
}
Demo2:
package com.hyg.StringDemo;
public class StringIndexOfDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
String string ="helloworld!";
int i = string.indexOf("l");
int a = string.indexOf("he");
int b = string.indexOf("worlde");
System.out.println("i="+i+" ,a = "+a+",b = "+b);
String string1 = string.substring(2);
String string2= string.substring(2,5);
System.out.println("string1="+string1+" ,string2= "+string2);
String str = " heool world! ";
System.out.println(str.trim());
System.out.println();
}
}
Demo3:
package com.hyg.StringDemo;
import java.util.Scanner;
public class CharAtDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String string = sc.nextLine();
sc.close();
char c;
int big = 0,small = 0,num = 0;
for (int i = 0; i < string.length(); i++) {
c = string.charAt(i);
if (48 <= c && c <= 57) //数字
num++;
if (65 <= c && c <= 90) //大写
big++;
if (97 <= c && c <= 122) //小写
small++;
}
System.out.println("大写有"+big+"个,小写有"+small+"个,数字有"+num+"个"+string);
}
}
6、String 、StringBuffer和StringBuilder的区别
String:任何对它内容的改变,都会产生新的对象,适合操作数量小的字符串。
StringBuffer:任何对它内容的改变,不会产生新的对象,适合操作数量大的字符串,操作速度快,适合多线程操作、常见的方法有append()追加 、reverse() 内容反转。
StringBuilder:任何对它内容的改变,不会产生新的对象,适合操作数量大的字符串,操作速度快,线程不安全、不适合多线程操作。
*注
1、内部类:也可以添加访问修饰符
2、同级类:不可以添加访问修饰符,一个Java文件中可以有多个同级类,但只能有一个公有的类
3、Integer类是对int的包装类
来源:CSDN
作者:超越梦想_G
链接:https://blog.csdn.net/qq_42000631/article/details/103988687