试题:
问:以下程序一共创建了几个对象
public class StringTest03 {
public static void main(String[] args) {
String s1=new String("aaa");
String s2=new String("aaa");
}
}
答:一共创建了3个对象
1个对象是"aaa"在方法区字符串常量池中
2个对象是堆内存中存储的String对象
String类的构造方法实例:
public class StringTest03 {
public static void main(String[] args) {
String s1="aaa";
System.out.println(s1);
//按道理来说s1在实际的内存存储中是一个内存地址,但是这里s1属于String类,进行了重写
//说明也进行了重写toString方法
//当一个普通的类的引用输出时,调用的是Object类中的toStirng方法,由于此方法没有重写,故输出的是内存地址
Customer customer=new Customer("aaa");
//这里只掌握最常用的构造方法
byte[] bytes={97,98,99};//分别对应a,b,c
String s2=new String(bytes);
//前面说过:输出一个普通的引用的时候,会自动调用toStirng方法,默认object的话,会自动输出对象的内存地
System.out.println(customer);
//通过输出结果我们得知,String类已经重写了toString方法
//输出字符串对象的话,输出的不是对象的内存地址,而是字符串本身
System.out.println(s2);
}
}
运行结果:
常用的String构造方法
String s="aaa";
String s=new String("aaa");
Stinrg s=new String(char数组)
String s=new String(char数组,起始下标,长度);
Stinrg s=new String(byte数组)
String s=new String(byte数组,起始下标,长度);