zoukankan      html  css  js  c++  java
  • String+变量”的操作是在运行时进行

    “String+变量”因为编译时无法进行优化(为什么无法进行优化),所以这一条语句的操作是在运行时进行的,且会产生新的对象,而不是直接从jvm的string池中获取。 那么新的对象是保存在哪里呢?是堆中吗?
    如下代码:
    1. String a = "ab"; 
     
    2. String bb = "b"; 
     
    3. String b = "a" + bb; 
     
    System.out.println((a == b));
    java中String的+运算符编译后其实是转换成了这样的代码:
    3. String b = new StringBuilder().append("a").append(bb).toString();
    看下StringBuilder的toString方法,使用new String(...);来构造一个String对象。

    String有两种构造方法,一种是new String,在jvm堆中分配,一种是String a="ab"这种方式,这种特殊的方式过程是这样的:JVM会先在string pool中去查找是否存在"ab"这样的字符串,如果存在就把引用地址返回,如果不存在,则构造一个并把它放到string pool中。

    很明显3的构造方法是使用了new来构造的,因此在jvm中的引用地址跟a肯定是不一样,你使用==来比较,比较的是它们的引用地址,它们肯定不相等,当然是false了。
    “+”这个连接符在编译后是String b = new StringBuilder().append("a").append(bb).toString();不能说
    String b = "a" + bb;
    在运行中等效于
    String b = new String("ab");
    。如果说都是在堆中分配这个意思的话,那就是等效的。
  • 相关阅读:
    Alpha冲刺(4/6)
    Alpha冲刺(3/6)
    Alpha冲刺(2/6)
    Alpha冲刺(1/6)
    团队Git现场编程实战
    团队项目-需求分析报告
    团队项目-选题报告
    第二次结对编程作业
    第一次团队展示
    第一次结对编程作业
  • 原文地址:https://www.cnblogs.com/chenlong-50954265/p/5632275.html
Copyright © 2011-2022 走看看