Java核对内库,String面试题分析

来源:互联网 发布:卡qq会员永久软件 编辑:程序博客网 时间:2024/06/04 23:40

面试题1:下列代码分别创建了几个String对象?

1、Sting str1 = "ABCD";

2、String str2 = new String("ABCD");

首先要了解常量池:专门存储常量的地方,都指的是方法区中。

  1. 编译常量池:把字节码加载进JVM的时候,存储的是字节码相关的信息。

  2. 运行常量池:存储常量数据。

Java核对内库,String面试题分析

内存图

那么我们得到结论:

  1. 第1行代码:最多创建一个String对象,最少不创建String对象;如果常量池中,已经存在“ABCD”,那么str1直接引用,此时不创建String对象,否则,先在常量池先创建“ABCD”内存空间,再引用。

  2. 第2行代码:最多创建两个String对象,至少创建一个String对象,new关键字,绝对会在堆空间创建内存区域,所以至少创建一个String对象。


面试题2:说说下面String对象,彼此之间是否相等?

String str1 = "ABCD";

String str2 = "A"+"B"+"C"+"D";

String str3 = "AB"+"CD";

String str4 = new String("ABCD");

String temp = "AB";

String str5 = temp + "CD";

String str6 = getXx()+"CD";

有高手来回答吗?