String s = new String("xyz") 创建了几个对象?

实例分析1

javac编译代码,然后用javap来反编译,执行javap -c Test

从结果来看,ldc命令在常量池中创建了一个"xyz"的对象,然后把他推至操作数栈顶,然后astore保存到局部变量,return返回。

实例分析2

同上反编译分析后

很明显,我们看到new 创建了一个String对象,同时ldc在常量池中创建了"xyz"字符串对象,之后invokespecial执行构造函数,astore_1赋值,return返回。

通过两个实例分析,可以知道String s = new String("xyz"); 创建了2个对象,而有些答案说的3个对象,则是把引用s也算作一个对象。还有答案说xyz存在就创建了2个,不存在就创建了3个(包含引用s),再来测试一下。

测试分析

同上反编译后

从这里,很明显的发现这就是我们例子1和2的一个结合,但是注意两次ldc后面的#2,#号代表着索引,说明第二次new String("xyz")的时候并没有重新创建xyz对象。

总结

到底创建了几个对象呢?

  1. 如果xyz不存在,引用算对象的话,那就是3个
  2. 如果xyz不存在,引用不算对象的话,那就是2个
  3. 如果xyz存在,引用算对象的话,那就是2个
  4. 如果xyz存在,引用不算对象的话,那就是1个

当然,我认为引用肯定是不算对象的,最终答案应该是1或者2个。

常见的指令助记符含义

  1. nop, 什么都不做。

  2. aconst_null,将 null 推送至栈顶。

  3. iconst_i(变量数字),将 int 型 i 推送至栈顶。同理有lconst_0,fconst_0这种你应该知道什么意思了

  4. ldc,将 int,float 或 String 型常量值从常量池中推送至栈顶。

  5. iload,将指定的 int 型局部变量推送至栈顶。

  6. istore,将栈顶 int 型数值存入指定局部变量。同理astore_i代表将栈顶引用型数值存入第i个局部变量。

  7. dup,复制栈顶数值并将复制值压入栈顶。

  8. invokevirtual,调用实例方法。

  9. invokespecial,调用超类构造方法,实例初始化方法,私有方法。

  10. invokestatic,调用静态方法。

  11. invokeinterface,调用接口方法。

  12. invokedynamic,调用动态链接方法。

  13. new,创建一个对象,并将其引用值压入栈顶。

补充题目

注:面试题二中

* System.out.println(s1 == s2); //true     地址值相同,都是常量,在常量池里面查找

* System.out.println(s1.equals(s2)); //true   地址值相同,默认同一个对象,值当然也是相等的。

String--常见面试题的更多相关文章

  1. 夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!

    目录 目录 string基础 Java String 类 创建字符串 StringDemo.java 文件代码: String基本用法 创建String对象的常用方法 String中常用的方法,用法如 ...

  2. Java String常见面试题汇总

    String类型的面试题   1.       String是最基本的数据类型吗? 基本数据类型包括byte,int,char,long,float,double,boolean,short一共八个. ...

  3. 【转载】常见面试题:C#中String和string的区别分析

    在很多人面试C#开发工程师的时候,会遇到一个面试题,就是C#中String和string有啥区别.其实针对这个问题C#中String和string没有本质上的区别,两者在程序中都可使用,稍微的一个区别 ...

  4. Java面试炼金系列 (1) | 关于String类的常见面试题剖析

    Java面试炼金系列 (1) | 关于String类的常见面试题剖析 文章以及源代码已被收录到:https://github.com/mio4/Java-Gold 0x0 基础知识 1. '==' 运 ...

  5. java常见面试题及答案 1-10(基础篇)

    java常见面试题及答案 1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被 ...

  6. JDBC常见面试题

    以下我是归纳的JDBC知识点图: 图上的知识点都可以在我其他的文章内找到相应内容. JDBC常见面试题 JDBC操作数据库的步骤 ? JDBC操作数据库的步骤 ? 注册数据库驱动. 建立数据库连接. ...

  7. Mybatis常见面试题

    Mybatis常见面试题 #{}和${}的区别是什么? #{}和${}的区别是什么? 在Mybatis中,有两种占位符 #{}解析传递进来的参数数据 ${}对传递进来的参数原样拼接在SQL中 #{}是 ...

  8. JavaSE:数据类型之间的转换(附常见面试题)

    数据类型之间的转换 分为以下几种情况: 1)低级到高级的自动类型转换: 2)高级到低级的强制类型转换(会导致溢出或丢失精度): 3)基本类型向类类型转换: 4)基本类型向字符串的转换: 5)类类型向字 ...

  9. 整理的最全 python常见面试题(基本必考)

    整理的最全 python常见面试题(基本必考) python 2018-05-17 作者 大蛇王 1.大数据的文件读取 ① 利用生成器generator ②迭代器进行迭代遍历:for line in ...

  10. PHP常见面试题汇总(二)

    PHP常见面试题汇总(二)   //第51题:统计一维数组中所有值出现的次数?返回一个数组,其元素的键名是原数组的值;键值是该值在原数组中出现的次数 $array=array(4,5,1,2,3,1, ...

随机推荐

  1. 性能测试学习之路 (一)认识jmeter(性能测试流程 && 性能测试通过标准 &&jmeter体系结构)

    性能测试是通过自动化的测试工具模拟多种正常.峰值以及异常负载条件来对系统的各项性能指标进行测试. 1 性能测试技能树 性能测试是一项综合性的工作,致力于暴露性能问题,评估系统性能趋势.性能测试工作实质 ...

  2. 【C/C++】C和C++11之enum枚举的使用细节

    作者:李春港 出处:https://www.cnblogs.com/lcgbk/p/14101271.html 目录 一.前言 二.C中的枚举(enum) 2.1 C中枚举的大小 2.2 C中枚举的取 ...

  3. 算法——寻找第K个最大的数

    在未排序的数组中找到第 k 个最大的元素. 链接: leetcode. 解题思路:通过快速排序的思想方法,每次随机获取指定范围内一个树的排序位置,然后根据这个位置,再重新指定范围,直到这个位置索引满足 ...

  4. SnowFlakeldWorker

    SnowFlakeldWorker java /** * Twitter_Snowflake * SnowFlake的结构如下(每部分用-分开): * 0 - 0000000000 000000000 ...

  5. java多线程之消费生产模型-使用synchronized解决虚假唤醒

    package com.wenshao.juc; /** * 生产者和消费者案例 * * @author Administrator * */ public class TestProductorAn ...

  6. 谈谈MySQL bin log的写入机制、以及线上的参数是如何配置的

    目录 一.binlog 的高速缓存 二.刷盘机制 三.推荐的策略 推荐阅读 问个问题吧!为什么你需要了解binlog的落盘机制呢? 我来回答一下: ​ 上一篇文章提到了生产环境中你可以使用binlog ...

  7. 热部署Devtools

    在子工程添加devtools的依赖 <dependency> <groupId>org.springframework.boot</groupId> <art ...

  8. Spring Boot 最简单的解决跨域问题

    跨域问题(CORS) CORS全称Cross-Origin Resource Sharing,意为跨域资源共享.当一个资源去访问另一个不同域名或者同域名不同端口的资源时,就会发出跨域请求.如果此时另一 ...

  9. UML—20—002

    博客班级 < https://edu.cnblogs.com/campus/fzzcxy/2018SE1> 作业要求 <https://edu.cnblogs.com/campus/ ...

  10. centos 7 yum 安装 python3

    sudo yum install epel-release sudo yum install python34参考:http://stackoverflow.com/questions/8087184 ...