A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梁健 黑马帝   /  2011-11-24 12:17  /  2185 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 l梁键 于 2011-11-24 16:13 编辑

String st="AB";
String sr="AB";
判断st==sr返回值为什么是true。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

7 个回复

倒序浏览
String 字符串即使对象,又是常量
字符串最大特点 :一旦被初始化就不可以改变.
字符串有一个常量池,可以从里面找已有的字符,
结果true ,在内存中以存在,不会在开辟空间。所以相等
回复 使用道具 举报
==如果要返回True的话,要么是基本类型的值相等,要么就是引用变量引用同一个对象。
你说的那种情况,就属于第二种,也就是说,St跟Sr引用的是同一个对象。想让他们返回Flase的话,这样
String St = new String("AB");
String Sr = new String("AB");
St == Sr
返回的就是Flase
回复 使用道具 举报
清秋 黑马帝 2011-11-24 12:30:56
板凳
定义sr时,字符串已经存在于内存中,不再开辟信空间。
因为字符串一旦被初始化就不可以改变,定义两个一样的字符串就浪费空间了
回复 使用道具 举报
因为都用双引号定义的
所有用双引号定义的字符串 如果字符串一样 就都存在同一个地址里面 不重新new 所以它们的地址相同
但是 如果是new 定义的 那么不管内存中有没有和它一样的 都重新起一个地址来存放
回复 使用道具 举报
String st="AB";
String sr="AB";
st 和 sr 都是字符串常量。
字符串常量一旦被初始化就不可以改变,字符串开始初始化的时候先在内存中开辟一个空间。
当在定义一个新的字符串时,它会在内存中以存找是否有相同的,当有相同的,它就不会在开辟新的空间。所以它们会相等。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
jianbin65 黑马帝 2011-11-26 22:22:47
7#
不运行想你能对多少?
  1. class stringEx{
  2.         public static void main(String[] args){
  3.                 String a ="java";
  4.                 String b ="java";
  5.                 String c =new String("java");
  6.                 String d ="ja";
  7.                 String e ="va";
  8.                 String f ="ja"+"va";
  9.                 String g =d+e;
  10.                 String h =c;
  11.                 if(a==b){System.out.println("a==b:true");        }
  12.                 else{System.out.println("a==b:false");        }
  13.                
  14.                 if(a==c){System.out.println("a==c:true");        }
  15.                 else{System.out.println("a==c:false");        }

  16.                 if(a==f){System.out.println("a==f:true");        }
  17.                 else{System.out.println("a==f:false");        }
  18.                
  19.                 if(a==g){System.out.println("a==g:true");        }
  20.                 else{System.out.println("a==g:false");        }       
  21.        
  22.                 if(a==h){System.out.println("a==h:true");        }
  23.                 else{System.out.println("a==h:false");        }       
  24.        
  25.                 if(c==f){System.out.println("c==f:true");        }
  26.                 else{System.out.println("c==f:false");        }       
  27.                                
  28.                 if(c==g){System.out.println("c==g:true");        }
  29.                 else{System.out.println("c==g:false");        }
  30.                        
  31.                 if(f==g){System.out.println("f==g:true");        }
  32.                 else{System.out.println("f==g:false");        }
  33.                        
  34.                 if(f==h){System.out.println("f==h:true");        }
  35.                 else{System.out.println("f==h:false");        }       
  36.                                
  37.                 if(g==h){System.out.println("g==h:true");        }
  38.                 else{System.out.println("g==h:false");        }
  39.         }
  40. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
李盈科 黑马帝 2011-11-26 22:54:17
8#
本帖最后由 李盈科 于 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"; }

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马