随笔 - 20  文章 - 57  trackbacks - 0
<2010年10月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿(2)

随笔分类

随笔档案

文章分类

文章档案

51CTO

搜索

  •  

最新评论

阅读排行榜

评论排行榜


完全用例子告诉你!不过首先你要清楚问题问的是什么?

首先,因该明白String是引用类型,是一个类,是一个不可变的类,并且有着特殊的作用。
String 只能复制一次!复制后不可改变!

String s = new String(“abc”);
s = new String(“cba”);
 
以上的代码并不是对s进行赋值,而是将“abc”的引用地址,从新赋给了s;
这个过程的内存是怎么分配的呢?



有几个问题要给大家说明一下:


1.String s = new String("abc");//在运行时涉及几个String实例?
  
    答案:两个,一个是字符串字面量"xyz"所对应的、驻留(intern)在一个全局共享的字符串常量池中的实例,另一个是通过new String(String)创建并初始化的、内容与"xyz"相同的实例。


2.String s = new String("abc");//涉及用户声明的几个String类型的变?

    答案:一个,就一个String s 。


3.String s = null;
  
    Java里变量就是变量,引用类型的变量只是对某个对象实例或者null的引用,不是实例本身。声明变量的个数跟创建实例的个数没有必然关系。


4.String s = new String("abc");//创建了几个String Object?

    答案:两个,一个是“abc”——这是一个匿名对象;一个是指向“abc”的引用对象s——这个是将匿名对象的地址赋给了s。


下面我们来看一段代码:

public class text{
   
   public static void main(String[] args){
      //定义一个str
      String str = new String("abc");
      //定义一个str1
      String str1 = "abc";
      //定义一个str2
      String str2 = "abc";
     
      System.out.println(str1 == str);
      System.out.println(str2 == str1);


}
 
}

运行结果是什么呢?




为什么第一个运行结果是false呢?  在这里"==" 其实比较的是他们在堆内存中的地址,因为str 和 str1 在堆内存中的地址不同的所以运行结果是false;
为什么第二个运行结果是true呢?   在这要说明一下,Sting是一个共享式输出类型,在内存中有一个String pool 用于存放String类型中相同的值。所以在给str2赋值的时候,JVM会在String pool中查找是否有与其所赋的值相等,如果相等就将相等的值的地址赋给str2,如果没有则在String pool中新开辟一块控件存放str2的内容。


这是我现在对String的一些理解,如果有错误,希望大家指出来,在这里谢谢大家了!
























posted on 2010-10-16 23:51 tovep 阅读(358) 评论(4)  编辑  收藏

FeedBack:
# re: Java_String小结 2010-10-17 12:42 迷人笑笑
这是用什么工具画的图啊!?外观不错-呵呵---  回复  更多评论
  
# re: Java_String小结 2010-10-17 18:57 Tovep
@迷人笑笑
用的是QQ的截图做的! 呵呵!  回复  更多评论
  
# re: Java_String小结 2010-11-10 20:01 小六夜疯狂
字符串常量池?
“==”和equals  回复  更多评论
  
# re: Java_String小结 2010-11-10 21:14 Tovep
@小六夜疯狂
你可以这么理解:

"=="比较的是栈内存中的内容,仅仅是内容!!!

"equals"比较的是对内存中内容,而不是栈内存中内容,比如你想返回TRUE:栈内存中的内容可以不同(也就是他们指向堆内存中地址不同),但是他们在堆内存中的内容必须相同!!!  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
主页