zoukankan      html  css  js  c++  java
  • 【转】常见Java面试题 – 第一部分:非可变性(Immutability)和对象引用(Object reference)

    ImportNew注: 本文是ImportNew编译整理的Java面试题系列文章之一。请看此系列相关面试题。你可以从这里查看全部的Java面试系列。

    一些比较核心的Java问题经常会用来考验面试者的Java基本知识功底。这篇文章列出来了一些在我的书里面没有的面试题,通过这些面试题读者也可以梳理一下Java基础知识点。

    Q1.下面的代码片段会输出什么?

    1 String s = " Hello ";
    2 s += " World ";
    3 s.trim( );
    4 System.out.println(s);

    A1.正确输出是” Hello  World “。

    由于字符串前后都有空格,因为有些人可能会认为结果是”Hello World”。那么,这个题目想要考察的是什么呢?

    1.  字符串对象(String Object)是非可变的(immutable),这个题目容易迷惑人的地方在s.trim( )这一行。

    2.  理解对象引用和不可达对象会由垃圾回收器收集。

    顺着这个题目,你觉得还可以考察哪些概念呢?

    1.  例如,上面的代码中一共会生成几个字符串对象,什么时候这些对象会变成不可达对象从而被垃圾回收器回收。

    2.  又比如,上面的代码的效率如何?

    最好的解释方式是通过一个图表来说明,如下:

    如果需要输出前后没有空格的”Hello World”,那么应该将s.trim( )再赋值给”s”。这个赋值操作可以让s指向新创建出来的字符串对象。

    上面的代码也可以改写成如下方式:

    1 StringBuilder sb = new StringBuilder(" Hello ");
    2 sb.append(" World ");
    3 System.out.println(sb.toString().trim( ));

    StringBuilder不是一个线程安全的类,因此仅仅用作本地变量是没有问题的。如果你希望用作实例变量,那么可以选择线程安全的StringBuffer类。想知道字符串操作背后的原理吗?可以点击这里:String concatenation

     

    扩展阅读:

    -- 扫描加关注,微信号: importnew --

    英文原文: Java Success,编译:ImportNew - 郑雯

    译文链接:http://www.importnew.com/2217.html

    【如需转载,请在正文中标注并保留原文链接、译文链接和译者等信息,谢谢合作!】

    博客地址: http://www.cnblogs.com/dwf07223,本文以学习、研究和分享为主,欢迎转载,转载请务必保留此出处。若本博文中有不妥或者错误处请不吝赐教。

  • 相关阅读:
    html5 audio vedio and video.js
    webpack的require是如何工作的?
    webpack HMR是如何工作的?
    vuejs code splitting with webpack 3种模式
    how webpack Hot Module Replacement works
    C# checkedlistbox 控件 有bug
    C# DataGridView 更改类型 重绘
    C# webapi
    C# 遍历控件名称
    C# 转json
  • 原文地址:https://www.cnblogs.com/dwf07223/p/3224690.html
Copyright © 2011-2022 走看看