String类的两种实例化方式
例.为String类对象直接赋值
public class StringDemo {
public static void main(String args[]){
String str = "www.Baidu.com";
System.out.println(str);
}
}
www.Baidu.com
以上代码没有使用关键字new,而String类本身就定义了一个构造方法,语法如下:
public String(String str)
例.利用构造方法实例化
public class StringDemo {
public static void main(String args[]){
String str = new String("www.Baidu.com");
System.out.println(str);
}
}
www.Baidu.com
字符串的比较1
例.判断两个int型整数是否相等
public class StringDemo {
public static void main(String args[]){
int x = 10;
int y = 10;
System.out.println(x==y);
}
}
true
本程序直接定义了两个int型变量,在Java中,“==”可以应用在所有数据类型中(包括基本数据类型和引用数据类型)
例.在String对象上使用“==”比较
public class StringDemo {
public static void main(String args[]){
String stra = "hello";
String strb = new String("hello");
String strc = strb;
System.out.println(stra==strb);
System.out.println(stra==strc);
System.out.println(strb==strc);
}
}
false
false
true
上述分析中,stra和strb虽然包含的内容完全一样,但是其所在的内存地址空间不同,而在使用“==”比较时,比较的只是数值,因此“==”不能实现准确的字符串比较
例.实现字符串内容比较
public class StringDemo {
public static void main(String args[]){
String stra = "hello";
String strb = new String("hello");
String strc = strb;
System.out.println(stra.equals(strb));
System.out.println(stra.equals(strc));
System.out.println(strb.equals(strc));
}
}
true
true
true
本例中,使用equals()方法进行内容的比较,其具体的语法为:
A.equals(B)---------判断A和B内容是否相等
注:
- “==”:是java提供的关系运算符,主要功能是进行数值相等判断,如果用在String对象上表示的是内存地址数值的比较;
- “equals()”:由String提供的一个方法,此方法专门负责进行字符串内容的比较
两种实例化的区别
1.直接赋值实例化String类对象
直接赋值就是将一个字符串的匿名对象设置了一个名字。其语法如下:
String 变量 = 字符串常量(匿名对象)
String str = "hello";
2.构造方法实例化String类对象
String str = new String("hello");
由于每一个字符串都是一个String类的匿名对象,所以首先会在堆内存中开辟一块空间保存字符串“hello”,之后使用关键字new,开辟另一块堆内存空间。因此真正使用的是用关键字new开辟的堆内存,一开始的空间将成为垃圾。
例.不自动保存对象池操作
public class StringDemo {
public static void main(String args[]){
String stra = "hello";
String strb = new String("hello");
System.out.println(stra==strb);
}
}
false
如果希望开辟的新内存数据也可以进行对象池的保存,那么可以采用String类定义的一个手工入池的操作,其语法如下:
public String intern();
例.手工入池
public class StringDemo {
public static void main(String args[]){
String stra = "hello";
String strb = new String("hello").intern();
System.out.println(stra==strb);
}
}
true
总结:在所有的开发中,String对象的实例化永远都采用直接赋值的方式完成