public class Test {
static String str1 = "Hello";
static String str2 = "Hello"; public static void main(String[] args) {
System.out.println(str1 == str2);
}
}
为什么输出是true?
static String str1 = "Hello";
static String str2 = "Hello"; public static void main(String[] args) {
System.out.println(str1 == str2);
}
}
为什么输出是true?
解决方案 »
- for 循环 如何写
- tomcat启动错误:Truncated class file
- 如何获得本地磁盘的信息呢?
- 多线程问题~~~~~~~~~~
- JAVA中怎么设置数据绑定?
- Serializable、Cloneable分别是代表什麽?
- 各位大侠-入门级的问题(JDK什么地方有下载,JAVA开始怎么配置)
- Java虚拟机的问题?
- 用java怎样修改操作系统的时间,我的操作系统是win2000?
- jtable中的一个列的内容过长,能不能让其折行显示!!!急!!!
- java 连接sqlserver 2000出现的问题,我已经查阅了许多资料,但仍不得其解,在线等解
- 有个很初学的提示不懂,希望能有个详细点的解释
仔细看看,讲得比较清楚
public static void main(String args[]){
String str1 = "Hello";
String str2 = "Hello";
System.out.println(str1==str2);
}
}结果为true
public class Test10 {
public static void main(String args[]){
String str1 = new String("Hello");
String str2 = "Hello";
System.out.println(str1==str2);
}
}结果为false==用来比较是否指向同一块内存,第二种创建字符串的方法在内存中开辟了2块空间分别用来存放str1和str2,注意比较
public static void main(String[] args) {
String a = "1234";
String b = "1234";
System.out.println(a == b); // true
System.out.println(a == TT.c); // true
System.out.println(a == new TT().d); // true
a = new String("1234");
b = new String("1234");
System.out.println(a == b); // false
}
}class TT {
static String c = "1234";
String d = "1234";
}
通过直接字符串赋值变量,会在stack中生成一个引用变量,和char[]数组,char[]在stack的字符串池进行共享,提高内存读写利用率,而==比较的是内容是否相等,相当于在stack中有两个引用变量都指向一块内存地址,当然相等
想想如果读写一文本文件,该有多少字符,重复的怎么办,要不断的创建对象,肯定不行,就是在字符串池中共享....
b = new String("1234");
System.out.println(a == b); // false
为什么是false 呢?
很明确的说明了这个问题:
直接用String定义的变量只要值一样,都指向同一块内存。
而用new String()出来的对象尽管值一样,也不在同一块内存中,
"==" 是比较俩个字符串是否指向同一内存。如果想比较值用equals方法。
而
String a = "1234";
String b = "1234";
System.out.println(a == b); // true
在java里它们不是为了简单,串也可以像简单的数据类型一样生成吗?
它们的效果应该是一样的吧?!
直接用String定义的变量只要值一样,都指向同一块内存。值存在“池”中。
而用new String()出来的对象尽管值一样,也不在同一块内存中,值存在"堆"中
"==" 是比较俩个字符串是否指向同一内存。如果想比较值用equals方法。