黑马程序员技术交流社区
标题:
string类问题
[打印本页]
作者:
梁健
时间:
2011-11-24 12:17
标题:
string类问题
本帖最后由 l梁键 于 2011-11-24 16:13 编辑
String st="AB";
String sr="AB";
判断st==sr返回值为什么是true。
作者:
李龙龙
时间:
2011-11-24 12:27
String 字符串即使对象,又是常量
字符串最大特点 :一旦被初始化就不可以改变.
字符串有一个常量池,可以从里面找已有的字符,
结果true ,在内存中以存在,不会在开辟空间。所以相等
作者:
肖岑锋
时间:
2011-11-24 12:29
==如果要返回True的话,要么是基本类型的值相等,要么就是引用变量引用同一个对象。
你说的那种情况,就属于第二种,也就是说,St跟Sr引用的是同一个对象。想让他们返回Flase的话,这样
String St = new String("AB");
String Sr = new String("AB");
St == Sr
返回的就是Flase
作者:
清秋
时间:
2011-11-24 12:30
定义sr时,字符串已经存在于内存中,不再开辟信空间。
因为字符串一旦被初始化就不可以改变,定义两个一样的字符串就浪费空间了
作者:
梦女孩
时间:
2011-11-24 14:32
因为都用双引号定义的
所有用双引号定义的字符串 如果字符串一样 就都存在同一个地址里面 不重新new 所以它们的地址相同
但是 如果是new 定义的 那么不管内存中有没有和它一样的 都重新起一个地址来存放
作者:
王丰盛568
时间:
2011-11-26 00:02
String st="AB";
String sr="AB";
st 和 sr 都是字符串常量。
字符串常量一旦被初始化就不可以改变,字符串开始初始化的时候先在内存中开辟一个空间。
当在定义一个新的字符串时,它会在内存中以存找是否有相同的,当有相同的,它就不会在开辟新的空间。所以它们会相等。
作者:
jianbin65
时间:
2011-11-26 22:22
不运行想你能对多少?
class stringEx{
public static void main(String[] args){
String a ="java";
String b ="java";
String c =new String("java");
String d ="ja";
String e ="va";
String f ="ja"+"va";
String g =d+e;
String h =c;
if(a==b){System.out.println("a==b:true"); }
else{System.out.println("a==b:false"); }
if(a==c){System.out.println("a==c:true"); }
else{System.out.println("a==c:false"); }
if(a==f){System.out.println("a==f:true"); }
else{System.out.println("a==f:false"); }
if(a==g){System.out.println("a==g:true"); }
else{System.out.println("a==g:false"); }
if(a==h){System.out.println("a==h:true"); }
else{System.out.println("a==h:false"); }
if(c==f){System.out.println("c==f:true"); }
else{System.out.println("c==f:false"); }
if(c==g){System.out.println("c==g:true"); }
else{System.out.println("c==g:false"); }
if(f==g){System.out.println("f==g:true"); }
else{System.out.println("f==g:false"); }
if(f==h){System.out.println("f==h:true"); }
else{System.out.println("f==h:false"); }
if(g==h){System.out.println("g==h:true"); }
else{System.out.println("g==h:false"); }
}
}
复制代码
作者:
李盈科
时间:
2011-11-26 22:54
本帖最后由 李盈科 于 2011-11-26 22:56 编辑
先了解一下Java 内存管理栈和堆 java的String类有个字符串池 这个是在栈中 ,String a =“hellow” 如果字符串池中没有这个对象 就创建一个新的返回给引用,如果有就把创建过的地址返回给引用。 String b = new String(“world”) 这个先看串池中有无这个对象 如果有就什么也不干,如果没有就创建一个对象,然后在在内存的堆里创建新的对象 返回给引用。new String每创建一次都会生成新的对象!
String 比较。。
class Test {
public static void main(String[] args) {
String hello = "Hello", lo = "lo";
System.out.print((hello == "Hello") + " ");
System.out.print((Other.hello == hello) + " ");
System.out.print((other.Other.hello == hello) + " ");
System.out.print((hello == ("Hel"+"lo")) + " ");
System.out.print((hello == ("Hel"+lo)) + " ");
System.out.println(hello == ("Hel"+lo).intern());
}
}
class Other { static String hello = "Hello"; }
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2