学习java String类
来源:互联网 发布:html5 list数据循环 编辑:程序博客网 时间:2024/04/23 15:00
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 String类
- JAVA String类学习
- Java学习-String类
- java学习--String类
- java-学习-string类
- Java学习 String 类
- java学习笔记---String类
- java学习笔记---String类
- JAVA学习【知】String类
- java学习之String类
- Java学习之String类
- java学习之String类
- Java学习之string类
- Java学习笔记:String类
- Java 学习之 String类
- JAVA进阶学习-java String类
- java学习笔记五--String类与String例子
- JAVA学习十八:String类、StrinBuffer类
- ap_compat.h
- 算法导论示例-GreedyActivitySelector
- Ole Argentina !!!!!!!!!!!!!!!!!!!
- 郭昶
- WWF的网站使用了新的.NET Framework 3.0的域名
- 学习java String类
- 你知道为什么zip始终不兼容rar吗?
- Dotnet IL Editor
- 等待观战荷兰大战科特迪瓦
- 《扩展和嵌入python解释器》1. 用C或C++扩展Python
- 生成静态文件的新闻系统核心代码(.net C#)
- 如何用动态网页生成静态网页
- Protected Processes in Windows Vista
- 《扩展和嵌入python解释器》1.1 一个简单的例子