专栏首页Java后端技术栈cwnait99%的java程序员都遇到过的笔试题

99%的java程序员都遇到过的笔试题

继上一篇:笔试题答案解析【第一篇】,今天分享一道经典的笔试题,

请看题:

先说明,这道理的几个选项其实都不严谨,正确的输出应该是:

goodand gbc

这里咱们忽略空格,所以答案就是B,主要的是本道题考察的是Java语言中传参方式和不可变类的知识。

不可变类(Immutable class)是指当创建了这个类的实例以后,就不允许修改它的值了,也就是说,一个对象一旦被创建出来后,在其正规生命周期中,他的成员变量就不能被修改。有点类似于常量,就是只允许其他程序进行读操作,而不允许其他程序对其进行修改操作。

在Java类库中,所有基本类型的包装类都是不可变类,比如:Integer,Long,Float等

public final class Integer extends Number implements Comparable<Integer> {
}
public final class Long extends Number implements Comparable<Long> {
}
public final class Short extends Number implements Comparable<Short> {
}
public final class Float extends Number implements Comparable<Float> {
}

除此之外,String类也是不可变的,

public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
}

有人会疑问下面的代码:

public static void main(String[] args) {
        String string=new String("hello");
        string=string+" world";
        System.out.println(string);
 }

运行结果:

hello world

表明上看,string=string+" world";的作用好像是修改了String类型对象的值,其实非也,String string=new String("hello");语句声明了一个变量string指向了String类型对象的引用,这个对象的内容是hello。这里string=string+" world";并没有修改new String("hello")这个对象的值,而是string指向了另外一个String类型的对象,该对象内容为 hello world。原来的那个字符串还在内存中,不曾被修改过。

在Java语言中,除了8种原始的数据类型byte、short、double、long,int,float,char和boolean外,其他的类型都是对象,在方法调用的时候,传递的都是引用。引用从本质上来讲也是按值传递,只不过传递的这个值是对象的引用而已,因此,在方法调用的时候,对形参引用所指对象属性值的修改可见。但是对引用值本身的修改对实参是不可见的。

关键词:参数传递,形参,实参,不可变类

本文分享自微信公众号 - Java后端技术栈(t-j20120622),作者:lawt

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 面试被问:HTTP客户端连接,选择HttpClient还是OkHttp?

    这又触及到我的知识盲区了,首先来一波面向百度学习,直接根据关键字httpclient和okhttp的区别、性能比较进行搜索,没有找到想要的答案,于是就去over...

    用户4143945
  • 如何更规范的写Java代码

    如何更规范化编写Java 代码的重要性想必毋需多言,其中最重要的几点当属提高代码性能、使代码远离Bug、令代码更优雅。

    用户4143945
  • 再谈泛型java---上

    可以看得出来,每次从list里取数据的时候,需要强制转换,所以这里就很容易报异常:ClassCastException.

    用户4143945
  • SpringMVC注解@initbinder解决类型转换问题

    在使用SpringMVC的时候,经常会遇到表单中的日期字符串和JavaBean的Date类型的转换,而SpringMVC默认不支持这个格式的转换,所以需要手动配...

    wuweixiang
  • 分割算法——可以分割一切目标(各种分割总结)

    周末应该是一个好好休息的时间,但是一定会有在默默努力科研的你,由于最近是开学季,很多关注的朋友一直会问“计算机视觉战队平台有基础性的内容吗?”,今天我和大家说一...

    计算机视觉研究院
  • SpringMVC注解 @initbinder 解决类型转换问题

    使用 SpringMVC 时,常遇到表单中日期字符串和 JavaBean 的 Date 类型的转换,而 SpringMVC 默认不支持这个格式的转换,故需要手动...

    微风-- 轻许--
  • 原 SpringBoot 2.0 系列00

    石奈子
  • Spring Boot 自动配置

    ○@SpringBootConfiguration:标记当前类为配置类 ○@EnableAutoConfiguration:开启自动配置 ○@Compone...

    赵哥窟
  • 腾讯云PHP SDK之Windows PHP Composer

    http://www.downxia.com/downinfo/162121.html

    我爱你的一诺
  • 聊聊spring cloud gateway的ForwardedHeadersFilter

    本文主要研究一下spring cloud gateway的ForwardedHeadersFilter

    codecraft

扫码关注云+社区

领取腾讯云代金券