- 字符串详解
package com.yuanzijian02; public class ObjectTest { public static void main(String[] args) { // TODO 自动生成的方法存根 Object object = new Object(); Object object2 = new Object(); System.out.println(object == object2); System.out.println("---------------------"); String str = new String("aaa"); String str2 = new String("aaa"); System.out.println(str == str2); System.out.println("---------------------"); String str3 = "bbb"; String str4 = "bbb"; System.out.println(str3 == str4); System.out.println("---------------------"); String str5 = "ccc"; String str6 = new String("ccc"); System.out.println(str5 == str6); } }
执行结果
false --------------------- false --------------------- true --------------------- false
2.equals()方法,该方法定义在Object类当中,因此在Java中的每个类都具有该方法,对于Object类的equals()来说,它是判断调用eqals()方法的引用于传进来的引用是否一致,即这两个引用是否指向的是同一个对象。对于Object类的equals()方法来说,它等价于==
package com.yuanzijian03; public class StringTest { public static void main(String[] args) { // TODO 自动生成的方法存根 String str = new String("aaa"); String str2 = new String("aaa"); System.out.println(str.equals(str2)); String str3 = "aaa"; String str4 = "aaa"; System.out.println(str3.equals(str4)); Object object = new Object(); Object object2 = new Object(); System.out.println(object.equals(object2)); } }
执行结果
true true false
3.对于String类的equals方法来说,它是判断当前字符串与传进来的字符串的内容是否一致
4.对于String对象相等判断来说,请使用equals()方法,而不要使用==
5.重写equals方法,判断两个字符串是否相等
package com.yuanzijian04; public class EqualsTest { public static void main(String[] args) { // TODO 自动生成的方法存根 Student s1 = new Student("zhangsan"); Student s2 = new Student("zhangsan"); System.out.println(s1 == s2); System.out.println(s1.equals(s2)); } } class Student{ String name; public Student(String name){ this.name = name; } public boolean equals(Object anObject){ if(this == anObject){ return true; } if (anObject instanceof Student){ Student student = (Student)anObject; if(student.name.equals(this.name)){ return true; } } return false; } }
执行结果
false true
6.String是常量,其对象一旦创建完毕之后,就无法改变,当我们使用加号来拼接字符串之后会生成新的String对象,而不是向原有的String对象追加内容
package com.yuanzijian05; public class StringTest2 { public static void main(String[] args) { // TODO 自动生成的方法存根 String s1 = "hello"; String s2 = "world"; String s3 = s1 + s2; System.out.println(s3); } }
执行结果
helloworld
7.String Pool(字符串池),首先检查字符串池有没有当前对象,如果有的话,就不会再向字符串池中添加创建对象,而是直接将字符串对象返回
8.String s = “aaa”;(看1中的程序)
1.查找String Pool中是否存在“aaa”这个对象,如果不存在,则在String Pool中创建一个对象,然后将String Pool中的这个“aaa”对象的地址返回来付给引用变量s,这样s会指向String Pool中的“aaa”
2.如果存在,则不创建任何对象,直接将String Pool中的这个“aaa”对象地址返回回来,直接赋值
9.String s = new String(“aaa”);(看1中的程序)
- 首先在 string Pool中查找有没有“aaa”这个字符串对象,如果有,则不再String Pool中再去创建"aaa"这个对象了,直接在堆中创建一个“aaa”字符串对象,然后将堆中这个“aaa”对象地址返回来,付给s引用,导致s指向了堆中创建的这个“aaa”字符串对象
- 2.如果没有,则首先在String Pool中创建一个“aaa”对象,然后在堆中heap创建一个“aaa”对象,然后将堆中这个“aaa”对象的地址返回来,付给s引用,导致s指向了堆中所创建的这个“aaa”对象
时间: 2024-12-21 16:44:51