zoukankan      html  css  js  c++  java
  • 为什么java里用常量赋值就相等,用字符串就不等?

    例一:

    String s0="HF";
    String s1=new String("HF");
    System.out.println(s0==s1);

    输入为什么是false呢?

    例一解释

    "=="表示的是地址是否相等。equals表示两个字符串的值是否相等,如果为s0.equals(s1)则返回true。

    程序执行时,会在栈里分配两块空间s0 s1,在堆空间里存储对象。内存分配图如下:

    例二:

    (1) String s1="123";
    String s2="123";
    s1变量先在栈中,然后在堆中开辟一个空间存储"123"
    (直接赋值,例如String s1="123")这个字符串存储在
    一个特殊的区域----常量池,
    在s2创建字符串"123"之前会先寻找堆中的常量池是否有
    对象"123",如果有就直接指向已经存在的"123"
    没有的话就重新开辟一个新空间存储在常量池中

    (2)String s1=new String("123");
    String s2=new String("123");
    变量s1先在栈中存储,然后在堆中开辟一个空间存储"123",
    s2创建字符串"123",直接再开辟新空间存储"123".

  • 相关阅读:
    webpack
    react 原理
    jest
    input 自动获取焦点
    taro
    html5标签
    webpack
    每日日报
    每日日报
    每日日报
  • 原文地址:https://www.cnblogs.com/0927wyj/p/5048170.html
Copyright © 2011-2022 走看看