zoukankan      html  css  js  c++  java
  • String str1="Hello",String str2=new String("Hello")

    package com.HelloWorld;
    /*
    String str1= "hello", String str2="he"+"llo";之所以str1==str2返回true是因为两者都是在字符串常量池中
    (由于初始化就会在此区域分布内存)而常量池中的有个与栈区类似的特性,就是当str2指向的常量在常量区已存在时,
    他不会创建新的内存空间来存此常量,而是指向已有常量的内存(应该是以此节约空间),此时str1与str2这两个引用变
    量的值都是存"hello"的内存空间地址,但是String str3= "he"+a;String a="llo";时str1==str3返回的为false,
    是因为:str1指向的hello在编译期一如既往的还是分配在常量区内,a指向的llo也在常量区,虽然str3也是初始化但是
    编译器无法判断a这货到底是什么个情况,进而不会将str3的等号右侧声明在常量区内,而是在通过构造时在堆区中的非常
    量池外的内存中声明,至此str3与str1不止是分配内存的时期不同(一个在编译期,一个在运行期)而且在内存空间的区
    域也不同,上面最高票答案只区分了时间没区分空间。
    */
    public class StringOne {

    public static void main(String[] args) {
      String str1="kobe";
      String str7="kobe";//str1与str7同时指向kobe字符串
      String str2="bryant";
      String str3="kobebryant";
      String str4="kobe"+"bryant";
      String str5="ko"+"be"+"bryant";
      String str6=str1+str2;
      System.out.println(str1==str7);//true
      System.out.println(str3==str4);//true
      System.out.println(str3==str5);//true
      System.out.println(str3==str6);//false
      System.out.println(str3.equals(str6));//true
      String str8;
      str8=str7;
      str8="ok";//str8重新指向ok字符串
      System.out.println(str1);//kobe

      }

    }

  • 相关阅读:
    修改默认runlevel
    shell数学运算
    Ubuntu碎碎念
    编译Linux-2.6.23内核中遇见的错误
    CentOS设置静态IP
    多线程--对象锁和类锁
    [Unity移动端]Touch类
    [Lua]string与中文
    MQTT 5.0 新特性(四)Clean Start 与 Session Expiry Interval
    EMQ 9 月 新发 | EMQ X Enterprise 3.4.0 功能概览
  • 原文地址:https://www.cnblogs.com/zhujialei123/p/8971720.html
Copyright © 2011-2022 走看看