stack(栈) and heap(堆)

本文参考了JAVA中Stack和Heap的区别

首先将所有的variable分成三类
第一类 基本类型(primitive types), 共有8种,即int, short, long, byte, float, double, boolean, char
第二类 String(String是一个特殊的包装类数据)
第三类 其他包装类数据

基本类型
   int a = 3; 
  int b = 3; 

编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找有没有字面值为3的地址,没找到,就开辟一个存放3这个字面值的地址,然后将a指向3的地址。接着处理int b = 3;在创建完b的引用变量后,由于在栈中已经有3这个字面值,便将b直接指向3的地址。这样,就出现了a与b同时均指向3的情况。

包装类数据

就是在stack里面建一个地址然后指向heap(其实我一直好奇它是如何指向的)

特殊包装类数据 String

String是一个特殊的包装类数据。即可以用String str = new String("abc");的形式来创建,也可以用String str = "abc";

假如我们是按照String str =new String (“abc”)来的话 那等于将它当作一个包装类数据
如果我们用的是String str = "abc"; 那么Java具体是这样执行的

  1. 先定义一个名为str的对String类的对象引用变量:String str;
  2. 在栈中查找有没有存放值为"abc"的地址,如果没有,则开辟一个存放字面值为"abc"的地址,接着创建一个新的String类的对象o,并将o 的字符串值指向这个地址,而且在栈中这个地址旁边记下这个引用的对象o。如果已经有了值为"abc"的地址,则查找对象o,并返回o的地址。
  3. 将str指向对象o的地址。值得注意的是,一般String类中字符串值都是直接存值的。但像String str = "abc";这种场合下,其字符串值却是保存了一个指向存在栈中数据的引用!
String a = "abc";
String b = new String "abc";
String c = "abc";
System.out.println(a == b);   //false
System.out.println(b == c);   //false
System.out.println(a == c);   //true
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就...
    木有鱼丸啦阅读 3,652评论 0 0
  • 文章摘录地址:http://www.cnblogs.com/iliuyuet/p/5603618.html 1.栈...
    蘑菇姐夫阅读 4,676评论 0 5
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,777评论 18 399
  • 原文http://topic.csdn.net/u/20081123/12/f70f1632-24be-4caa-...
    小5筒阅读 3,477评论 0 0
  • 1856.感恩一切都是最好的安排,在旺城财商群竟然遇见心想生老师的学员,遇见同修,我如此神奇的创造。 1857.感...
    李馨兰阅读 3,480评论 0 0

友情链接更多精彩内容