今天遇到了一个面试题的选择,我当时真的没怎么在乎,其实挺好玩的。java
1.这条语句String s="a"+"b"+"c"+"d";一共建立了多少个对象()A.1B.4C.6D.7
这道题放在了第一题 没动脑子数了数 感受是八个 可是没有选项 又数了数 难道是五个 仍是没有选项 而后我就选了B...纯属瞎写了(主要是谁没事这么声明变量啊)个人答案确定不对啊 回来的路上仔细想了想 感受应该是选择D.7个由于:"a" "b" "c" "d" 各为一个,一共四个 而后 "ab" "abc" "abcd" 一共三个 我把s给算上了一个 因此是八个 若是不算 就是七个。可是感受仍是有点别扭 后面的"a" "b" "c" "d"顶多算是常量,对于常量,编译时就直接存储它们的字面值而不是它们的引用,我感受我想复杂了,感受就一个对象(主要是看到这题也不可能直接选择A呀确定会想的多一些)。而后我回去试了试 而后查看编译后的class文件,呵,瞬间感受本身当时太傻了,真的是没想到,编译器仍是很聪明的,本身把这个很长(傻)的声明总结起来了,直接提取成String s = "abcd";而后根据这个想一下,当执行到这个变量的时候,会先去String常量池里找,若是没有的话确定就会建立一个对吧,因此这道题我以为应该选择A。![]()
![]()
![]()
最重要的来了,我去网上搜了一下,好多人都在讨论这个问题。。。问题讨论传送(我以为我确定是和社会脱节了,主要当时看见这个题天然而然的和String s="a"+"b"+new String("c");这类题目联想到一块儿了,再加上本身有点紧张,哈哈,不能解释,这就是本身技术不行)
最后我查了几篇文章,感受就是本身太自做聪明了,一看题就以为面试官出的题目会有坑,而后就自做的想不少,其实这道题也是一种坑,只怪本身基础知识不扎实,看了这篇文章感受明白了 文章传送
这道题虽然很小 可是仍是记录一下吧 很容易就懵了 感受这道题是很基础的一道面试题 我第一次遇到 是否是很幸运同时又很可悲呢。。。基础啊~真的很重要!!!菜鸟要进步!!!