`

常见Java面试题(一):非可变性(Immutability)和对象引用(Object reference)

阅读更多

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

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

String s = " Hello ";
s += " World ";
s.trim( );
System.out.println(s);

 

A1.正确输出是" Hello World "。

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

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

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

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

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

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

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

 

 

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

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

 

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

StringBuilder不是一个线程安全的类,因此仅仅用作本地变量是没有问题的。如果你希望用作实例变量,那么可以选择线程安全的StringBuffer类。

 

原文:http://www.importnew.com/2217.html

  • 大小: 65.3 KB
分享到:
评论

相关推荐

    java常见笔试、面试题深度剖析

    ### Java常见笔试、面试题深度剖析之String相关 #### 背景介绍 在Java编程语言中,`String` 类型是最常用的数据类型之一。它不仅代表文本数据,还涉及到了许多重要的概念,如字符串池(String Pool)、不可变性...

    Java基础面试题(2012完整版)

    ### Java基础面试题知识点解析 #### 1. Java平台独立性 Java的设计核心之一就是“一次编写,到处运行”的理念,这得益于Java虚拟机(JVM)。开发人员编写的Java程序,无论在哪个平台上,只要该平台有相应的JVM,就...

    JAVA基础问题面试大全

    ### JAVA基础问题面试大全知识点详解 ...以上是基于给定文件内容整理的JAVA基础面试知识点,涵盖了抽象、继承、封装、多态性等多个面向对象编程的重要概念,以及字符串、异常处理、集合框架等方面的基础知识。

    前端开源库-immutability-helper

    **前端开源库-immutability-helper** 是一个专为JavaScript开发者设计的工具库,它提供了一种高效、方便的方式来处理对象和数组的不变性。在JavaScript中,直接修改对象或数组通常会导致不可预测的行为,因为它们是...

    java笔试题大全

    ### Java笔试题大全知识点解析 #### 一、方法重写(Overriding)与方法重载(Overloading) **方法重写(Overriding)** 和 **方法重载(Overloading)** 是 Java 中非常重要的概念。 - **方法重写(Overriding):** 当子类...

    react-react面试题之对immutable的理解.zip

    在React开发中,数据的不可变性(Immutability)是一个重要的概念,它在优化性能、简化代码逻辑以及实现响应式更新中起着关键作用。本文将深入探讨React面试中常问到的“对Immutable的理解”这一主题。 一、什么是...

    8张图解java

    字符串在Java中是不可变的对象。一旦创建了一个字符串对象,其内容就不能改变。这种特性对于字符串非常重要,因为它提高了程序的安全性和效率。 **示例代码解析:** ```java String s = "abcd"; s = s.concat("ef...

    21-C-ImmutableObject-Code.zip

    在编程领域,不可变对象(Immutable Object)是一种重要的设计模式,尤其在多线程和并发环境中,它提供了安全性和性能优化。在这个初学者教程中,我们将深入探讨C#中的不可变对象,包括“内部不变性”和“观察不变性...

    Laravel开发-immutability

    总的来说,"Laravel开发-immutability"这个主题为Laravel开发者提供了一种工具,帮助他们更轻松地实现模型属性的不可变性,从而提升应用的数据安全性和一致性。在处理关键数据或有严格数据变更规则的项目中,这个包...

    immutability:使实例不可变(深度冻结)并进行版本控制

    这种将对象的身份作为一系列不可变快照的方法在很大程度上受到了2009年精彩演讲启发。 由。 概要 没有内存的不可变对象: 包括Immutability模块以使对象不可变(深度冻结)。 require "immutability" class User ...

    immutability-helper-extensions:扩展不变性助手

    安装带yarn : yarn add immutability-helper immutability-helper-extensions使用npm : npm i --save immutability-helper immutability-helper-extensions添加扩展要导入扩展,只需导入即可: const update = ...

    2021年100道春招面试题.docx

    函数式编程是一种编程范式,它强调使用纯函数、不可变数据结构和递归来编写代码。函数式编程的优点有:避免了副作用、易于并行处理、代码简洁易读。然而,函数式编程也存在一些缺点,如性能可能不佳、递归函数可能...

    Practical Java(简体中文)

    **封装**确保了数据的安全性和模块化,通过隐藏内部实现细节,Java允许开发者创建高度抽象的数据类型,从而提高代码的可维护性和安全性。**继承**则允许子类继承父类的属性和方法,促进了代码重用,减少了冗余,增强...

    全面了解Kotlin2021大厂Android高级面试题及答案

    ### Kotlin 2021 大厂 Android 高级面试题及答案解析 #### 基础知识点概览 在本篇文章中,我们将深入探讨Kotlin语言的一些关键特性及其在Android开发中的应用。通过理解这些核心概念,可以帮助开发者更好地准备与...

    Java经典试题及答案

    - `finalize` 方法是 `Object` 类中的一个特殊方法,用于在对象被垃圾回收前执行必要的清理工作。 - 子类可以通过覆盖 `finalize` 方法来执行特定的资源清理操作。 - 这个方法由垃圾回收器调用,但并不保证一定会...

    JAVA中关于String的一些注意点

    `String` 类是不可变的,这意味着一旦创建了一个`String` 对象,它的值就不能被改变。这种设计有以下优点: - 线程安全:不可变对象可以安全地在多个线程之间共享,无需额外的同步开销。 - 性能优化:由于字符串是...

    string-immutability:Java字符串不变性和StringBuilder不变性的单元测试。 String和StringBuilder是两个与文本处理相关的流行类

    在`string-immutability-master`这个项目中,可能包含了这样的测试用例,通过Junit或其他测试框架,来演示和验证Java字符串不变性以及`StringBuilder`的可变性。测试代码通常会包括创建、修改和比较字符串的不同方法...

    java并发编程 英文版

    4. 不可变性(Immutability):讲解了对象不可变性是如何简化并发程序设计,以及如何利用不可变对象来保证线程安全。 5. 锁(Locking):介绍了使用锁来同步对共享资源的访问,防止竞态条件和数据不一致。 6. 状态...

    Practical Java

    书中深入讨论了Java编程中的细节问题,如对象创建(object creation)、对象初始化(object initialization)、克隆(Cloneable)、序列化(Serializable)、等价性(Equality)、不可变性(Immutability)、多线程...

Global site tag (gtag.js) - Google Analytics