学习java String类
2006-06-16 23:51
405 查看
class A
{
static String lock1 ="mylock";
String lock11="mylock";
}
class B
{
static String lock2=new String("mylock");
static String lock3="mylock";
String lock22=new String("mylock");
String lock23="mylock";
}
public class HelloWorld {
/**
* @param args
*/
public static void main(String[] args)
{
// TODO 自动生成方法存根
System.out.println("你好");
String a = "Hello";
String b = "Hello";
String c = "HelloHello";
String d = "Hello" + "Hello";
String e = "Hell" + "oHello";
String f = a + b;
String g = a+"Hello";
System.out.println("c == d : " + (c == d)); // true
System.out.println("c == e : " + (c == e)); // true
System.out.println("c == f : " + (c == f)); // false
System.out.println("c == g : " + (c == g)); //false
有这样一个规则:
(1) 当 = 的右边全是字符串常量,那么 = 左边的变量(左值)也成为字符串常量。
(2) 当 = 的右边包含字符串变量(或其它变量),那么 = 左边的变量(左值)也成为字符串变量(StringBuffer().append()...的结果)。
原因:编译器优化,右边全是常量运算,则生成一个常量;字符串常量不同于字符串变量,字符串变量常量存于 类常量池 Class Constant Pool中,对于同一个常量的引用相等。
System.out.println(A.lock1.equals(B.lock2)); // true : 值的比较
System.out.println(A.lock1==B.lock2); //false:引用的比较,new出来的String对象的引用!=同值常量的引用
System.out.println(A.lock1==B.lock3); //true:对于不同的类的Class Constant Pool,可以发生Same String constant reference
A obj_a=new A();
B obj_b=new B();
System.out.println(obj_a.lock11==obj_b.lock22); //false
System.out.println(obj_a.lock11==obj_b.lock23); //true
//原因:同上。对类成员、对象成员同时成立。
}
}
参考:http://forum.javaeye.com/viewtopic.php?t=11649&postdays=0&postorder=asc&start=30
http://forum.javaeye.com/viewtopic.php?t=12961&postdays=0&postorder=asc&start=0&sid=9505d8ef70ecce0626907531c025b884 http://dreamhead.blogbus.com/logs/2005/05/1189478.html
{
static String lock1 ="mylock";
String lock11="mylock";
}
class B
{
static String lock2=new String("mylock");
static String lock3="mylock";
String lock22=new String("mylock");
String lock23="mylock";
}
public class HelloWorld {
/**
* @param args
*/
public static void main(String[] args)
{
// TODO 自动生成方法存根
System.out.println("你好");
String a = "Hello";
String b = "Hello";
String c = "HelloHello";
String d = "Hello" + "Hello";
String e = "Hell" + "oHello";
String f = a + b;
String g = a+"Hello";
System.out.println("c == d : " + (c == d)); // true
System.out.println("c == e : " + (c == e)); // true
System.out.println("c == f : " + (c == f)); // false
System.out.println("c == g : " + (c == g)); //false
有这样一个规则:
(1) 当 = 的右边全是字符串常量,那么 = 左边的变量(左值)也成为字符串常量。
(2) 当 = 的右边包含字符串变量(或其它变量),那么 = 左边的变量(左值)也成为字符串变量(StringBuffer().append()...的结果)。
原因:编译器优化,右边全是常量运算,则生成一个常量;字符串常量不同于字符串变量,字符串变量常量存于 类常量池 Class Constant Pool中,对于同一个常量的引用相等。
System.out.println(A.lock1.equals(B.lock2)); // true : 值的比较
System.out.println(A.lock1==B.lock2); //false:引用的比较,new出来的String对象的引用!=同值常量的引用
System.out.println(A.lock1==B.lock3); //true:对于不同的类的Class Constant Pool,可以发生Same String constant reference
A obj_a=new A();
B obj_b=new B();
System.out.println(obj_a.lock11==obj_b.lock22); //false
System.out.println(obj_a.lock11==obj_b.lock23); //true
//原因:同上。对类成员、对象成员同时成立。
}
}
参考:http://forum.javaeye.com/viewtopic.php?t=11649&postdays=0&postorder=asc&start=30
http://forum.javaeye.com/viewtopic.php?t=12961&postdays=0&postorder=asc&start=0&sid=9505d8ef70ecce0626907531c025b884 http://dreamhead.blogbus.com/logs/2005/05/1189478.html
相关文章推荐
- JAVA学习第二十九课(经常使用对象API)- String类
- JAVA学习十八:String类、StrinBuffer类
- Java学习笔记(二):字符串String类
- 黑马程序员--Java基础学习笔记【Object类、String类】
- JAVA学习【4】String类不可改变
- java学习笔记---String类
- java 学习 String类 和 StringBuffer类的用法 暑假第九天
- JAVA String类学习
- JAVA学习【知】String类
- Java中String类以及相关的类的学习
- java学习123之String类
- 8.java学习 20131212 String类的基本方法
- 黑马程序员 java学习笔记——String类(包含StringBuffer和StringBuilder)
- JAVA学习 String类的并置的一个小问题
- Java基础学习第十二天——String类
- java 学习 String类 和 StringBuffer类的用法 暑假第九天
- Java学习笔记(15)--Java String类详解(二)
- Java学习笔记21(String类补充:正则表达式)
- JAVA学习笔记之String类及其成员函数
- java学习之路--java对象(1)--重点String类的常用方法