论坛首页 Java企业应用论坛

java编译器对string常量表达式的处理和优化

浏览 11061 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-09-11  
不跑题了,这个东西用来考人是否合适不要再争论了,反正每个人有每个人的想法,不要将自己的观点强加给人。

我写这个文章原本就是想将这个问题阐述清楚,因为见过类似的很多帖子和讨论。我不谦虚地说很多都没有将问题解释清晰,我个人认为我的理解和解释是比较合理和准确的,因此整理出来和大家分享,如果有误则希望能得到指正。

我个人的观点是这个话题对深入理解java/jvm对String的处理还有很有帮助的,和“i=i+++++i;”这样的话题不一样。
0 请登录后投票
   发表时间:2007-09-11  

事实上没几个人会这么写:

变量X=常量A+常量B;

----------------------------------------

这里别说的这么绝对,某些情况下这种写法是存在的:

String words = "**  **"; 
因为长度很大,比如150个字符,超过了通常要求的单行80个字符的格式要求,而java中又没有类似c++的这种写法:
"aaaaaaaaa\
bbbbbbb"

因此可以考虑使用
String words = "**"
+ "**";
的写法,至少在sun的编译器下是达到理想的效果,即满足了格式要求又不带来额外的性能消耗。

当然如果有使用其他编译器的情况就只好想其他办法了。
0 请登录后投票
   发表时间:2007-09-11  
Stirng c="abab";
System.out.println(("abab" == c));
输出什么?Why?
0 请登录后投票
   发表时间:2007-09-11  
赞同ajoo。

你不要怪ajoo说的极端。矫枉必先过正。

这种题目只能考察出面试者对于java语言的某些细节的了解程度,当作小插曲聊聊天还可以,要据此对应试者的编程能力做出推断,是不可能的。

而且这也无关乎优化。字符串比较没有什么可以优化的,全部equals就完了。
0 请登录后投票
   发表时间:2007-09-11  
skydream 写道

事实上没几个人会这么写:

变量X=常量A+常量B;

----------------------------------------

这里别说的这么绝对,某些情况下这种写法是存在的:

String words = "**  **"; 
因为长度很大,比如150个字符,超过了通常要求的单行80个字符的格式要求,而java中又没有类似c++的这种写法:
"aaaaaaaaa\
bbbbbbb"

因此可以考虑使用
String words = "**"
+ "**";
的写法,至少在sun的编译器下是达到理想的效果,即满足了格式要求又不带来额外的性能消耗。

当然如果有使用其他编译器的情况就只好想其他办法了。


请问,这种情况是不是在编程中是特例?而不是普适性的东西?如果仅仅是讨论某种特例,我当然不反对深入研究,可这东西作为考题,那就是不合适.
0 请登录后投票
   发表时间:2007-09-12  
这种题目只能考察出面试者对于java语言的某些细节的了解程度,当作小插曲聊聊天还可以,要据此对应试者的编程能力做出推断,是不可能的。


-----------------------

看来是我没有解释清楚了,其实我的意思也是如此,的确这个问题只是考察String这个一个非常小范围的了解程度,也仅此而已。

我只是觉得这个问题比问“String和StringBuffer的差别”这样的问题好些,因为后者即使答对了也完全不能说明什么(当然连这个都答不对那么就很成问题了),很难通过对方的回答来分辨新手和高手(同样只限于String这么一个非常小的范围),而我分析的这个问题则相比可以比较方便的考察出来对方对String的了解水准。

也仅此而已了,我觉得类似这种的细节问题,答出来说明这个知识点的掌握不错,答不出来则不应该就这一个问题作任何结论。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics