1、Object类中toString()
所有的类都默认的继承了Object类
Object类中的toString方法返回的是类的名字和该对象哈希码组成的字符串
System.out.printf(类对象名)实际输出的是该对象的toString()方法所返回的字符串
为了实际需求需要子类重写父类的toString()方法
Object类中的equals()方法
用来判断调用equals对象和形参obj所引用的对象是否是同一对象,所谓对同一对象就是内存中同一块存储单元,若是返回ture,否则false;
public boolean equals(Object obj)
{
return this ==obj;
}
考虑到容器list,set中的存放数据,通过List.add(1)放置数据,容器可以放各种数据,Set s中但不能放相同的数据。所以需要将aa1和aa2内存不同,值相同是不能放入,aa1.equals(aa2)认为不相等,所以需要重写equals()
2、重写equals()
class A
{ public int i;
public A(int i)
{ this.i = i;
}
public boolean equals(Object obj)
{ //在强制转换前已经将子类赋值给父类
A aa = (A)obj; //obj.i error, 因为父类不能调用子类中内容,父类中不包含i成员。若调用子类成员,需要强
//制转换。
if(this.i == aa.i) //if (当前对象的i和obj代表的i相等)
return true;
else
return false;
}
}
public class TestStringEquals_2
{
public static void main(String[] args)
{
A aa1 = new A(2);
A aa2 = new A(2);
System.out.println( aa1.equals(aa2) ); //true
}
}
String类中有很多方法,Sting类用来表示字符串:
3、String类中的equals()方法
Object中的equals()默认两个对象即使内容一样,认为两个对象不相等。
class A
{
public int i;
public A(int i)
{
this.i = i;
}
}
public class TestStringEquals_1
{
public static void main(String[] args)
{
A aa1 = new A(2);//数字
A aa2 = new A(2);
System.out.println( aa1.equals(aa2) );//False
if (aa1 == aa2)
System.out.printf("aa1和aa2相等\n");
else
System.out.printf("aa1和aa2不相等\n");//ok
String str1="abc";
String str2="abc";
System.out.println( str1.equals(str2) ); //true,对equals()重写
// System.out.println(aa1); //A@
// System.out.println(aa2); //A@
}
}
4、String类
java.lang.String类对象表示不可修改的Unicode编码(2个字节)字符串,C中利用char Str[10]=“abc”,为ASCII编码,只占一个字节。这里直接有String str=“abc”
在jav中双引号括起来的字符串可以当做String对象
/*
测试String类的
equals方法的使用
==的用法
常量字符串的用法
*/
public class TestString_1
{
public static void main(String[] args)
{
String str1 = new String("china");
String str2 = new String("china");
System.out.println(str1.equals(str2)); //true str1.equals(str2) 用来判断str1**指向的对象的内容**和str2指向的对象的内容是否相等 //True
if (str1 == str2) //是判断str1和str2**自身的内容**是否相等? 还是用来判断str1指向的对象的内容和str2指向的对象的内容是否相等? 答案: 代表前者() 是同一对象判断
System.out.println("str1 == str2");
else
System.out.println("str1 != str2"); //OK
String str3 = "china";//字符串常量在栈区存放的,局部变量str3、str4存放在栈,类的非静态属性在堆区,被static修饰,“”abc“”在静态数据区(data segment)存放。str3和str4同时指向“china”。
String str4 = "china";
if (str3 == str4)
System.out.println("str3 == str4"); //OK。
else
System.out.println("str3 != str4");
}
}
5、String类中的常用方法
将字符串与整数转换
public class TestString_2
{
public static void main(String[] args) throws Exception
{
int i = 123;
String str = "456";
//str = i; //error
//i = str; //error
str = String.valueOf(i);
System.out.printf("str = %s\n", str);
i = Integer.parseInt(str);//("12a"格式异常)
System.out.printf("i = %d\n", i);
}
}
6、StringBuffer类
String类对象一旦创建不能更改,若经常修改使用String的话就导致耗空间和时间(放置在数据区,若两个字符串的生成,相连接,在创建一个新的变量,将两者相连。)String类public final class String,因此不能被继承;String类中没有修改字符串的方法,但是在StringBuffer中有很多修改字符串的方法。若需要对字符串内容修改就需要式样StringBuffer。
向StringBuffer中赋值的时候可以通过它的append方法,
插入insert()方法
利用toString()将StringBuffer对象转换为String