Java对象创建方式及JVM对字符串处理
作者:网络转载 发布时间:[ 2013/4/26 10:57:39 ] 推荐标签:
② 下面我们再看一题经典的笔试面试题:String javaStr = "小学徒" + "的" + "成长历程";总共创建了多少个字符串对象?
答案是一个,因为如果一个字符串连接表达式的值可以在编译时确定下来,那么JVM会在编译时计算该字符串变量的值,并让他指向字符串池中对应的字符串。但如果程序使用了变量,或者调用了方法,那么只能等到运行时才可确定该字符串连接式的值,也无法在编译时确定字符串变量的值,因此无法确定该字符串变量的值,所以无法利用JVM的字符串池。
下面我们写一段代码验证一下吧:
public class Test{
public static void main(String[] args) {
String anotherStr = "小学徒的成长历程";
//虽然javaStr的值不是直接量,但是因为javaStr的值可以在编译时确定
//所以javaStr也会直接引用字符串池中对应的字符串
String javaStr = "小学徒" + "的" + "成长历程";
String a = "的";
//使用了变量,只能等到运行时才可确定该字符串连接式的值
//也无法在编译时确定字符串变量的值,因此无法确定该字符串变量的值,所以无法利用JVM的字符串池
String contactStr = "小学徒" + a + "成长历程";
//调用了方法只能等到运行时才可确定该字符串连接式的值
//也无法在编译时确定字符串变量的值,因此无法确定该字符串变量的值,所以无法利用JVM的字符串池
String methodStr = "小学徒的成长历程" + a.length();
//判断各个字符串是否相等
System.out.println("javaStr == anotherStr : " + (javaStr == anotherStr));
System.out.println("contactStr == javaStr : " + (contactStr == javaStr));
System.out.println(" methodStr == javaStr : " + (methodStr == javaStr));
}
}
运行结果:
③ 呵呵,我们再用一题经典面试笔试题目来抛砖引玉吧,这样比较可以诱导大家的思考,同时增加大家的兴趣,不会太过闷,而且还能提醒大家在笔试面试的时候该注意什么地方,好啦,言归正传。String name = "小学徒"; name = name + "的成长空间";两条语句总共创建了多少个字符串对象?
答案是两个,因为当一个String对象创建完成后,该String类里包含的字符串序列被固定下来了,以后永远都不能改变。(如果目前不懂这句的话,没关系,看下补充你理解的了)
public class Test{
public static void main(String[] args) {
String name = "小学徒"; //定义一个字符串变量
System.out.println(System.identityHashCode(name)); //输出该对象的hashCode值
name = name + "的成长空间"; //拼接字符串变量
System.out.println(System.identityHashCode(name));//输出该对象的hashCode值
}
}
运行结果:
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11