Java—String类
一、toString()方法
1.public String toString():返回对象的字符串;
2.toString(),返回的是对象的地址值,没有实际意义,需要重写;重写规制:返回对象的属性值;
getClass.getName()+'@'+Integer.toHexString(hashCode));
getClass.getName----->返回值是完的包名加上类名;
'@'为连接符号,无特殊含义;
hashCode()------>表示hashCode值;
Integer.toHexString()----->表示以十六进制形式来表示;
如:Person@1c62a(案例2的输出)
3.案例1:
 1 class Student02{
 2 
 3     private String name;
 4     private int age;
 5 
 6     public Student02(){}
 7 
 8     public Student02(String name, int age){
 9         this.name = name;
10         this.age = age;
11     }
12 
13     public String getName(){
14         return name;
15     }
16 
17     public int getAge(){
18         return age;
19     }
20 
21     public void setName(String name){
22         this.name = name;
23     }
24 
25     public void setAge(int age){
26         this.age = age;
27     }
28 
29     @Override
30     public String toString(){
31         return name+"\t"+age;
32     }
33 }
34 
35 //测试类
36 public class Test13 {
37     public static void main(String[] args) {
38         //实例化对象
39         Student02 stu = new Student02("lili",18);
40         System.out.println(stu.toString());
41         //自定义对象中重写toString方法,会默认调用toString
42         System.out.println(stu);
43 
44     }
45 }
二、equals()方法
1.方法:public boolean equals(Object obj)----->表示他某个对象是否与此对象“相等”;
2.解释:
- 对于任何非空引用值x和y,当且仅当x和y引用同一个对象时,此方法才返回true;
 - 两个对象的地址值是一样才返回true;
 
3.equals() 默认比较的是两个对象的地址值,没有实际意义,需要重写;重写规制:比较对象的属性值是否相同;
4.“==” 与 equals() 的比较
- 相同点:都可以用于来比较是否相等;
 - 不同点:
- “==”既可以比较基本数据类型,也可以比较引用数据类型,equals() 只能是比较引用数据类型;
 - “==” 比较基本数据类型,比较的是数值是否相同,比较引用数据类型时,比较的是地址值是否相等;equals() 没有重写之前,比较的对象的地址值是否相同,重写之后,比较的是对象的属性值是否相同;
 
 
5.案例2:
 1 //equals()方法
 2 
 3 import java.util.Objects;
 4 
 5 class Person{
 6 
 7     private int pid;
 8     private String name;
 9 
10     public Person(){}
11 
12     public Person(int pid,String name){
13         this.pid = pid;
14         this.name = name;
15     }
16 
17     public int getPid(){
18         return pid;
19     }
20 
21     public void setPid(int pid){
22         this.pid = pid;
23     }
24 
25     public String getName(){
26         return name;
27     }
28 
29     public void setName(String name){
30         this.name = name;
31     }
32     //重写的equals比较的是属性值,没有重写过的equals比较的是地址值
33     @Override
34     public boolean equals(Object o){
35         //若本类Person等于新类o
36         if(this == o)
37             return true;
38         //若类不同或者空
39         if(o==null || getClass()!=o.getClass())
40             return false;
41         //声明Person对象person
42         Person person = (Person)o;
43         return pid==person.pid && Objects.equals(name,person.name);
44     }
45     //重写
46     @Override
47     public int hashCode(){//重写 哈希值函数
48         return Objects.hash(pid,name);
49     }
50 }
51 //测试类
52 public class test01 {
53     public static void main(String[] args) {
54 
55         Person p1 = new Person(1001,"Tom");
56         Person p2 = new Person(1002,"Tony");
57 
58         System.out.println(p1.equals(p2));//输出false 证明p1和p2不等
59 
60         Person p3 =p1;
61         System.out.println(p1);//输出Person@1c62a
62         System.out.println(p3);//输出Person@1c62a
63         System.out.println(p1.equals(p3));//输出true 证明p1和p3相等
64 
65     }
66 }
三、String
1.概念:String类代表字符串;字符串是常量,使用final来进行修饰;不能改变地址值,但能改变对象的内容;String对象时不可变的,因此可以共享;字符串字符值是存在堆内存中,字符串的底层是使用字节数组来进行存储。
2.字符串构造方法:
| 构造方法名称 | 构造方法的描述 | 
| String s = "abc" | 字面值底层也会执行字符串的构造方法 | 
| public String() | 初始化一个新创建的String对象 | 
| public String(byte[] bytes) | 将字节数组构成一个字符串 | 
| public String(byte[] bytes, int offset, int length) | 将字节数组按指定的长度内容构建成一个字符串 | 
| public String(char [] value) | 将字符数组构建成一个新的字符串 | 
| public String(char[] value, int offset, int count) | 将字符数组指定的长度内容构建成一个字符串 | 
3.字符常用的方法-判断性
| 方法名称 | 方法描述 | 
| public boolean contains(CharSequence s) | 判断字符串中是否包含此字符 | 
| public boolean equals(Object anObject) | 用于判断两个字符串内容是否相同 | 
| public boolean startsWith(String prefix) | 此字符串是否以指定的前缀开始 | 
| public boolean endWith(String suffix) | 此字符串是否以指定的后缀结束 | 
| public boolean isEmpty() | 当且仅当length()为0时返回true | 
| public int length() | 返回此字符串的长度 | 
| public boolean equalslgnoreCase(String anotherString) | 将此String与另一个String比较,不考虑大小写 | 
案例3:
 1 //键盘录入一个银行卡余额123456789将字符处理结果为123,456,789
 2 
 3 import java.util.Scanner;
 4 
 5 public class test03 {
 6     public static void main(String[] args) {
 7         //实例化Scanner
 8         Scanner input = new Scanner(System.in);
 9         System.out.println("请输入一串字符");
10 
11         String s = input.next();
12         String [] arrays = new String[s.length()];
13         for (int i=0;i<arrays.length;i++){
14             arrays[i]=(s.charAt(i)+"");
15         }
16         //定义一个字符串来进行拼接
17         String str = "";
18         //循环遍历数组
19         for(int i=arrays.length-1;i>=0;i--){
20             //是3的倍数
21             if(i!=0 && i%3 ==0){
22                 str+=arrays[arrays.length-1-i]+",";
23             }else {
24                 str+=arrays[arrays.length-1-i];
25             }
26         }
27         System.out.println(str);
28     }
29 }
4.String的转换性
| 方法名称 | 方法描述 | 
| public byte[] getBytes() | 将字符串转换为字节数组 | 
| public char[] toCharArray() | 将字符串转换为字符数组 | 
| public String toLowerCase() | 将所有的字符转换为小写 | 
| public String toUpperCase() | 将所有的字符转换为大写 | 
| public String contact(String str) | 在字符串末尾进行拼接(+) | 
| public String replace(Char oldChar,char newChar) | 替换字符串指定的内容 | 
| public String [] split(String regex) | 根据指定的字符来进行拆分 | 
| public String trim() | 去掉首尾的空格 | 
| public static String valueOf(boolean b) | 将各种数据类型的数据转换为字符串类型数据 | 
案例4:
1 import java.util.Scanner; 2 3 //键盘录入一串字符,将字符中大写转化成小写,将小写转化为大写,数字以*来代替 4 public class test04 { 5 public static void main(String[] args) { 6 //实例化Scanner 7 Scanner input = new Scanner(System.in); 8 System.out.println("请输入一串字符"); 9 10 String s = input.next(); 11 //将字符串转化为字符数组 12 char [] arrays = s.toCharArray(); 13 //定义一个字符串来进行拼接 14 String str = ""; 15 //使用循环遍历 16 for (int i=0;i<arrays.length;i++){ 17 //判断 18 if (arrays[i]>='a'&&arrays[i]<='z'){ 19 str+=(arrays[i]+"").toUpperCase(); 20 }else if(arrays[i]>='A'&&arrays[i]<='Z'){ 21 str+=(arrays[i]+"").toLowerCase(); 22 }else { 23 str+="*"; 24 } 25 } 26 System.out.println(str); 27 } 28 }
5. StringBuffer
(1).概念:StringBuffer是线程安全的可变字符序列,一个类似于String的字符串缓冲区;StringBuffer上的主要操作是append和insert方法,可以改变该序列的长度和内容;StringBuffer在多线程中线程安全但效率低;
(2).StringBuffer与String比较:
- String是不可变字符序列,StringBuffer是可变字符序列;
 - String操作字符串的效率比较低,StringBuffer操作字符串的效率比较高
 
(3).StringBuffer与StringBuilder比较:
- 版本不一样,StringBuffer为1.0,StringBuilder为1.5;
 - 多线程安全性不一样,StringBuffer是多线程安全的,StringBuilder是多线程不安全的;
 - 操作字符串效率不一样,StringBuffer效率低,StringBuilder效率高;
 
(4).StringBuffer的构造方法
| 构造方法的名称 | 构造方法的描述 | 
| public StringBuffer() | 构建一个StringBuffer,初始容量为16个字符 | 
| public StringBuffer(int capacity) | 构建一个StringBuffer,指定初始容量的字符串缓冲区 | 
| public StringBuffer(String str) | 将字符串构建成一个StringBUffer对象,字符串的初始容量为16加上字符串参数的长度 | 
(5).常用的方法
| 方法的名称 | 方法的描述 | 
| public StringBuffer append(boolean b) | 在末尾进行追加 | 
| public StringBuffer insert(int offset,boolean b) | 在指定的位置插入值 | 
| public int indexOf(string str) | 查找指定字符的索引值 | 
| public int capacity() | 获取内容的容量 | 
| public char charAt(int index) | 获取指定索引的内容 | 
| public StringBuffer delete(int start, int end) | 根据区间来进行删除 | 
| public StringBuffer reverse() | 控制反转 | 
| public String subString(int start, int end) | 截取指定的字符 | 
| public String toString() | 转换为字符串 | 
| public int length() | 获取StringBuffer中内容的长度 | 
| public StringBuffer replace(int start, int end, String str) | 替换指定区间的内容 | 
(6)StringBuffer与String之间相互转换
StringBuffer---->String
public String toString()【用toString()方法】
public String(StringBuffer buffer)【构造方法】
String----->StringBuffer
public StringBuffer(String str)【构造方法】
new StringBuffer().append(String str);

                
            
        
浙公网安备 33010602011771号