一、 String java="java",va="va";
System.out.println(java=="java");
System.out.println(otherobj.java==java);
System.out.println(java==("ja"+"va"));
System.out.println(java==("ja"+va));
请问,运行后
true
true
true
false
为什么最后的结果是false呢?
二、 String a = new String("foo");
String b = new String("foo");
String c="foo";
String d="foo";
System.out.println(a==b);
System.out.println(c==d);
运行后
false
true
请问这里的区别是什么呢?
System.out.println(java=="java");
System.out.println(otherobj.java==java);
System.out.println(java==("ja"+"va"));
System.out.println(java==("ja"+va));
请问,运行后
true
true
true
false
为什么最后的结果是false呢?
二、 String a = new String("foo");
String b = new String("foo");
String c="foo";
String d="foo";
System.out.println(a==b);
System.out.println(c==d);
运行后
false
true
请问这里的区别是什么呢?
解决方案 »
- 一个数字序列问题
- 编写一个用户界面的程序,接受输入的10个整数,并输出这是个整数的最大值盒最小值
- SWT的GC画图问题
- 一道面试题(java)
- 怎么用流打包png图片等资源?
- synchronized是什么,帮助只有synchronize
- 在线等待--关于<Form method="POST" ENCTYPE="multipart/form-data" action="">怎样传递表单中的每个文本框的内容
- 在命令行输入appletviewer Run1.java,为什么没有显示??
- 用java画的曲线为什么在IE5.0是能打印出来,而在IE6.0和IE5.5时就不行(急!)
- 我正在作一个简单的telnet客户端的程序,我的DataInputStream的in.readLine()不对?十万火急!!请高手点拨!!!!另外,为什么我只能给29分,本来我给的100分的!?
- 关于继承内部内的问题?请给予解答
- 多线程与GUI(如何将多线程的数据传到GUI,并实现时时刷新?)
a是指向foo这个对象的一个引用,a.equals(b);
==一般比较的是对象的地址,
System.out.println(otherobj.java==java);
System.out.println(java==("ja"+va));这2个明显有区别啊
String str1 = new String("ok");
和String str2 = "ok";
是不同的,前者是引用,而后者则不是!
我是这样理解的不知道对不对?
至于System.out.println(java==("ja"+va));为false
是不是有隐式类型转换使得"ja"+va转成了引用?
String java="java",va="va";
System.out.println(java=="java");这里相等是因为:java在内存中只保存一份字符串常量,第一行的java变量和第二行的"java"指向同一个地址.所以==
编译期和运行期这些基本概念
String b = new String("foo");
String c="foo";
String d="foo";
System.out.println(a==b);
System.out.println(c==d);
运行后
false
true
请问这里的区别是什么呢?
编译期和运行期这些基本概念
UP.
建议楼主先看好 关于初始化内存顺序。
String a = new String("foo");
String b = new String("foo");
String c="foo";
String d="foo";
System.out.println(a==b);
System.out.println(c==d);
运行后
false
true
请问这里的区别是什么呢?
String c="foo";
String d="foo"; 指向的是同一个内存地址。
String a = new String("foo");
String b = new String("foo"); 不是指向同一个地址。
Java在32位OS下,是用int来表示Hash值的。
这只是在理论上可以用equals进行字符串比较,但是这个是不准确的做法。
还是要坚持用compareTo
因为两个相同的字符串具有相同的Hash是在一定条件下才成立的。
而String a==b这样的代码永远都不要写出来。基本没用用的。
healer_kx(甘草(朝圣中... ...)) ( ) 信誉:100 2006-08-18 10:59:00 得分: 0
连个Hash的字样都看不到,怎么让我认同各位呢?
Java在32位OS下,是用int来表示Hash值的。
这只是在理论上可以用equals进行字符串比较,但是这个是不准确的做法。
还是要坚持用compareTo
因为两个相同的字符串具有相同的Hash是在一定条件下才成立的。
而String a==b这样的代码永远都不要写出来。基本没用用的。
"ja" + "va" 由于全部都是static final String 所以它会存入静态池中
而"ja" + va 由于va 是String 对象,所以在这里会构建一个新的String 对象
你可以试试
System.out.println(java==("ja"+va).intern());
会是什么样的结果呢?呵呵
事实上,为了在高并发的系统中,防止产生的String 对象占用内存过多,在某些地方需要用intern() 方法进行优化处理,而且还可以大大提高字符串比较效率哦