• java存储位置经典例子


    String a="a";
    String b="b";
    String c="ab";
    String d="ab";
    String e=a+b;

    程序中用来存放数据的内存分为四块
    1、全局区(静态区)(static)
    2、文字常量区 :常量字符串就是放在这块区域,即是我们常说起的常量池。
    3、栈区(stack):存放函数的参数值,局部变量的值等。
    4、堆区(heap) : 存放对象

    当我们定义字符串
    String a = "a";
    a在栈区,“a”是字符串常量,在常量池中
    String b = "b";
    b在栈区,“b”在常量池
    String c="ab";
    c在栈区,“ab”在常量池
    String d="ab";
    d在栈区,这个时候常量池里已经有"ab",所以直接使用已经有的那个“ab”
    所以这个时候c和d都指向的常量池里面的同一个“ab”
    String e=a+b;
    e在栈区,a+b实际上产生了一个新的String对象,既然是String对象,所以结果“ab”放在堆区中,即e指向的是堆里的“ab”
    这样的情况下,c==d为true,c==e为false
    ////////////////////////////////////
    另外,如果定义的是字符串对象
    String str1 = new String("ab");
    str1在栈区,创建的“ab”字符串对象在堆区
    String str2 = new String("ab");
    str2在栈区,又创建的一个新的“ab”对象也在堆区,不过和刚才的“ab”不是同一个。
    相当于堆区中有两个字符串对象,不过正好内容都是“ab”而已。

    所以str1==str2为false

    常量池里面放着的常量字符串可以重复使用,但是必须是你直接使用的该字符串,像a+
    b这种形式虽然得到的结果是“ab”,但并不是使用的字符串常量“ab”

    转自:http://blog.sina.com.cn/s/blog_4b622a8e0100c296.html

  • 相关阅读:
    Brackets_区间DP
    石子合并_区间Dp
    You Are the One_区间DP
    Palindrome subsequence_区间DP
    Infix to postfix 用stack模板,表达式没有括号
    Java 4
    Java 3
    规范化的递归转换成非递归
    recursion 递归以及递归的缺点
    Infix to postfix conversion 中缀表达式转换为后缀表达式
  • 原文地址:https://www.cnblogs.com/JimLy-BUG/p/4009792.html
Copyright © 2020-2023  润新知