Java理论题(1)——面试题

1.JDK 和 JRE 有什么区别?

JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的 开发环境和运行环境。

JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的 运行提供了所需环境。

具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具。简单来说:如果你需要运 行 java 程序,只需安装 JRE 就可以了,如果你需要编写 java 程序,需要安 装 JDK。

2. == 和 equals 的区别是什么?

①:== 解读

对于基本类型和引用类型 == 的作用效果是不同的,如下所示:

基本类型:比较的是值是否相同;

引用类型:比较的是引用是否相同;

代码示例:

String x = "string";
String y = "string";
String z = new String("string");
System.out.println(x==y); // true
System.out.println(x==z); // false
System.out.println(x.equals(y)); // true
System.out.println(x.equals(z)); // true

        代码解读:因为 x 和 y 指向的是同一个引用,所以 == 也是 true,而 new String()方法则重写开辟了内存空间,所以 == 结果为 false,而 equals 比较 的一直是值,所以结果都为 true。

②:equals 解读

equals 本质上就是 ==,只不过 String 和 Integer 等重写了 equals 方 法,把它变成了值比较。看下面的代码就明白了。

首先来看默认情况下 equals 比较一个有相同值的对象,代码如下:

class Cat { 
public Cat(String name) { 
this.name = name; 
}
private String name;
 public String getName(){ 
return name; 
}
 public void setName(String name) { 
this.name = name; 
}
}
Cat c1 = new Cat("王磊");
Cat c2 = new Cat("王磊");
System.out.println(c1.equals(c2)); // false

输出结果出乎我们的意料,竟然是 false?这是怎么回事,看了 equals 源 码就知道了,源码如下:

public boolean equals(Object obj) { 
return (this == obj);
}

原来 equals 本质上就是 ==。 那问题来了,两个相同值的 String 对象,为什么返回的是 true?代码如 下:

String s1 = new String("老王");
String s2 = new String("老王");
System.out.println(s1.equals(s2)); // true

同样的,当我们进入 String 的 equals 方法,找到了答案,代码如下:

public boolean equals(Object anObject) { 
    if (this == anObject) { 
    return true; 
    } 
    if (anObject instanceof String) { 
        String anotherString = (String)anObject; 
        int n = value.length; 
        if (n == anotherString.value.length) { 
            char v1[] = value; 
            char v2[] = anotherString.value; 
            int i = 0; 
            while (n-- != 0) { 
                if (v1[i] != v2[i]) 
                    return false; 
                    i++; 
                } 
            return true; 
            } 
        } 
    return false;
}

原来是 String 重写了 Object 的 equals 方法,把引用比较改成了值比较。

③:总结 

== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、 Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。

3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

        解答:不对,两个对象的 hashCode()相同,equals()不一定 true。 代码示例: 

String str1 = "通话";
String str2 = "重地";
System.out.println(String.format("str1:%d|str2:%d",str1.hashCode()
,str2.hashCode()));
System.out.println(str1.equals(str2));

执行的结果:

str1:1179395 | str2:1179395

false

代码解读:

很显然“通话”和“重地”的 hashCode() 相同,然而 equals() 则为 false, 因为在散列表中,hashCode()相等即两个键值对的哈希值相等,然而哈希值 相等,并不一定能得出键值对相等。

4. String 属于基础的数据类型吗?以及基本类型有哪些?

String 不属于基础类型,基础类型有 8 种:byte、boolean、char、short、 int、float、long、double,而 String 属于对象。 

5. final 在 java 中有什么作用?

  • final 修饰的类叫最终类,该类不能被继承。
  • final 修饰的方法不能被重写。
  • final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。

6. String 类的常用方法都有那些?

  • indexOf():返回指定字符的索引。
  • charAt():返回指定索引处的字符。
  • replace():字符串替换。
  • trim():去除字符串两端空白。
  • split():分割字符串,返回一个分割后的字符串数组。
  • getBytes():返回字符串的 byte 类型数组。
  • length():返回字符串长度。
  • toLowerCase():将字符串转成小写字母。
  • toUpperCase():将字符串转成大写字符。
  • substring():截取字符串。
  • equals():字符串比较。

后续还会继续更新此类理论题型,大家有什么需要,还望留言告知

 支持:🎁🎁🎁如果你觉得博主的文章的不错或者对你有帮助,可以点一个免费的关注支持一下博主,如果三连收藏支持就更好了吖,嘿嘿嘿,蟹蟹。 

总共11页 一万字左右 皆为个人上课整理笔记。 贴上前几道整理以作预览 1、 缩写JDK的含义是什么。 JDK 是Java开发工具包 (Java Development Kit ) 的缩写。它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境。其中包括了Java编译器、JVM、大量的Java工具以及Java基础API里面是Java类库和Java的语言规范,同时Java语言的任何改进都应当加到其中,作为后续版本发布。要成为一名程序员,JDK是一种最基本的工具。 (JDK是Java development toolkit,相当于是Java的库函数,是编译,运行java程序的工具包。) 2、 解释Java语言跨平台的技术基础。 因为Java程序编译之后的代码不是能被硬件系统直接运行的代码,而是一种“中间码”——字节码。然后不同的硬件平台上安装有不同的Java虚拟机(JVM),由JVM来把字节码再“翻译”成所对应的硬件平台能够执行的代码。因此对于Java编程者来说,不需要考虑硬件平台是什么。所以Java可以跨平台。 3、 什么是Java语言的自动垃圾收集。 4、 说明J2SE、J2ME、J2EE各自的含义。 J2EE是Java 2 enterprise edition是Java的一种企业版用于企业级的应用服务开发 J2SE是Java 2 standard edition是Java的标准版,用于标准的应用开发 J2ME是Java 2 Micro Edition是Java的微型版,常用于手机上的开发 J2EE,J2SE,J2ME是java针对不同的的使用来提供不同的服务,也就是提供不同类型的类库。 5、 Java的包是什么含义,有哪些作用。 包就是用来装不同java源文件和类文件的文件夹。 作用有两个:一个是防止重名现象,还有一个是隐藏具体实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-今非昔比°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值