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

      }

    }

  • 相关阅读:
    matrix_last_acm_4
    matrix_last_acm_3
    matrix_last_acm_2
    matrix_last_acm_1
    2015亚洲区北京站网络赛
    poj 1062 昂贵的聘礼 最短路
    2-SAT !!
    hdu 4925
    hdu 4927 Java大数
    poj3687 拓扑排序 还没怎么搞明白 回头再想想
  • 原文地址:https://www.cnblogs.com/zhujialei123/p/8971720.html
Copyright © 2011-2022 走看看