Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
清新范er
JavaGuide
提交
7950140a
J
JavaGuide
项目概览
清新范er
/
JavaGuide
与 Fork 源项目一致
从无法访问的项目Fork
通知
4
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
JavaGuide
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
7950140a
编写于
5月 02, 2019
作者:
S
SnailClimb
提交者:
GitHub
5月 02, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update Java基础知识.md
修改 “17. 接口和抽象类的区别是什么?”的解答。
上级
38b43780
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
8 addition
and
6 deletion
+8
-6
docs/java/Java基础知识.md
docs/java/Java基础知识.md
+8
-6
未找到文件。
docs/java/Java基础知识.md
浏览文件 @
7950140a
...
...
@@ -219,11 +219,13 @@ String 中的对象是不可变的,也就可以理解为常量,线程安全
每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象。StringBuffer 每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用 StringBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。
**对于三者使用的总结:**
1.
操作少量的数据: 适用String
2.
单线程操作字符串缓冲区下操作大量数据: 适用StringBuilder
3.
多线程操作字符串缓冲区下操作大量数据: 适用StringBuffer
## 13. 自动装箱与拆箱
**装箱**
:将基本类型用它们对应的引用类型包装起来;
**拆箱**
:将包装类型转换为基本数据类型;
...
...
@@ -233,6 +235,7 @@ String 中的对象是不可变的,也就可以理解为常量,线程安全
由于静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非静态变量,也不可以访问非静态变量成员。
## 15. 在 Java 中定义一个不做事且没有参数的构造方法的作用
Java 程序在执行子类的构造方法之前,如果没有用 super() 来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用 super() 来调用父类中特定的构造方法,则编译时将发生错误,因为 Java 程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法。
## 16. import java和javax有什么区别?
...
...
@@ -244,10 +247,10 @@ Java 程序在执行子类的构造方法之前,如果没有用 super() 来调
## 17. 接口和抽象类的区别是什么?
1.
接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),而抽象类可以有非抽象的方法。
2.
接口中
的实例变量默认是 final 类型的
,而抽象类中则不一定。
3.
一个类可以实现多个接口,但
最多只能实现一个抽象类
。
4.
一个类实现接口的话要实现接口的所有方法,而抽象类不一定。
5.
接口不能用 new 实例化,但可以声明,但是必须引用一个实现该接口的对象。
从设计层面来说,抽象是对类的抽象,是一种模板设计,而接口是对行为的抽象,是一种行为的规范。
2.
接口中
除了static、final变量,不能有其他变量
,而抽象类中则不一定。
3.
一个类可以实现多个接口,但
只能实现一个抽象类。接口自己本身可以通过extends关键字扩展多个接口
。
4.
接口方法默认修饰符是public,抽象方法可以有public、protected和default这些修饰符(抽象方法就是为了被重写所以不能使用private关键字修饰!)。
5.
从设计层面来说,抽象是对类的抽象,是一种模板设计,而接口是对行为的抽象,是一种行为的规范。
备注:在JDK8中,接口也可以定义静态方法,可以直接用接口名调用。实现类和实现是不可以调用的。如果同时实现两个接口,接口中定义了一样的默认方法,则必须重写,不然会报错。(详见issue:
[
https://github.com/Snailclimb/JavaGuide/issues/146
](
https://github.com/Snailclimb/JavaGuide/issues/146
)
)
...
...
@@ -322,11 +325,10 @@ public class test1 {
```
**说明:**
-
String 中的 equals 方法是被重写过的,因为 object 的 equals 方法是比较的对象的内存地址,而 String 的 equals 方法比较的是对象的值。
-
当创建 String 类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。如果没有就在常量池中重新创建一个 String 对象。
## 27. hashCode 与 equals (重要)
面试官可能会问你:“你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?”
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录