欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识
本文作者: ImportNew - 唐尤华 未经许可,克制转载!

每周10道 Java 口试题由 ImportNew 整理编译自网络。
口试题谜底接头请移步:https://github.com/jobbole/java-interview/issues/1
Java口试题投递交换请移步:https://github.com/jobbole/java-interview/issues/2

1. 写出下面代码的运行功效。

int src = 65536;
Integer dst = new Integer(65536);
System.out.println(src == dst);
System.out.println(dst.equals(src));

谜底:true true
考点:Integer 的 equals 实现。查察源代码可以发明,65536 装箱为 Integer 工具后,dst.equals 要领较量的是 obj.intValue。

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}

2. 写出下面代码执行功效。

// 1. 打印 null String
String s = null;
System.out.println(s);

// 2. 打印 null Integer
Integer i = null;
System.out.println(i);

// 3. 打印 str
String str = null;
str = str + "!";
System.out.println(str);

谜底:

null
null
null!

考点:打印函数 print 与字符串拼接函数对 null 都举办了非凡处理惩罚,因此不会呈现运行时异常,而是输入出 “null” 字符串。
细节阐明可拜见 Importnew:Java String 对 null 工具的容错处理惩罚 一文。

3. 写出下面代码的运行功效。

public class Example {
    private static void sayHello() {
        System.out.println("Hello");
    }

    public static void main(String[] args) {
        ((Example)null).sayHello();
    }
}

谜底:Hello
考点:null 作为非根基范例,可以做范例转换,转换后挪用静态要领输出字符串。根基范例,好比 int,范例转换时会陈诉空指针异常,好比 int a = (Integer)null; 原因就是转换进程中会挪用 intValue(),劳务派遣管理系统,因此会陈诉异常。

4. String类能被担任吗,为什么?

谜底:不能。因为 String 类的界说为 final class,被 final 修饰的类不能被担任。

public final class String

考点:String 工具不行变的(immutable)。阐明为什么要这么设计,大概有以下3个原因:

  • String pool:这是要领(method)区域里一个非凡的存储区域,建设一个 String 时,假如已经在 String pool 中存在,那么会返回已存在的 String 引用。
  • 答允 String 缓存 hashcode:String 界说中,有 hash 成员变量 private int hash; // 默认为0,对 hashcode 举办缓存。
  • 安详性:确保不会被恶意改动。
  • 5. 写出下面代码的运行功效。

    String s1 = "Cat";
    String s2 = "Cat";
    String s3 = new String("Cat");
    
    System.out.println("s1 == s2 :"+(s1==s2));
    System.out.println("s1 == s3 :"+(s1==s3));

    谜底:

    s1 == s2 :true
    s1 == s3 :false

    考点:领略 String pool,s1 与 s2 字符串内容沟通,因此直接从 String pool 中返回沟通的地点。s3 会建设一个新的 String 工具,因此 s1==s3 功效返回 false。

    6. String s3 = new String(“Cat”) 这句代码会建设几个 String 工具?

    谜底:1 或 2 个。

    考点:领略 String pool 机制。假如 Spring pool 在执行语句之前没有 “Cat” 工具,那么会建设 2 个 String;反之只建设 1 个 String 工具,”Cat” 会从 String pool 中直接返回工具。

    7. String、StringBuffer、StringBuilder的区别?

    谜底:有以下区别:

    1. String 是不行变的,StringBuffer、StringBuilder 是可变的;
    2. String 、StringBuffer 是线程安详的,StringBuilder 不是线程安详的。
    3. StringBuilder 相较于 StringBuffer 有速度优势,所以大都环境下发起利用 StringBuilder 类。然而在应用措施要求线程安详的环境下,昆山软件开发,则必需利用 StringBuffer 类。

    8. 如何较量两个字符串?利用 “==” 照旧 equals() 要领?