Java之区别总结
1.char和varchar
- char:长度固定
- varchar:长度可变
2.“==”和equals()
- ==:比较值
- equals():比较地址
- 注意:自动装箱和自动拆箱
3.Comparable和Comparator接口
- Comparable:Java提供了只包含compare To()方法的Comparable接口。这个方法可以对两个对象排序。输出结果0、负数、正数三种
- Java提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个对象排序。
4.Collection和Collections
- Collection:是集合类的上级接口,继承于他的接口主要是set和list
- Collections:Collections类是针对于集合类的一个帮助类。他提供了一系列的静态方法堆各种集合的搜索、排序、线程安全化等操作
5.run()和start()
- run():只是调用普通的run()方法
- start():启动了线程,由jvm调用run方法
6.sleep()和wait()
- sleep():是线程类Thread的方法,导致此线程暂停执行指定时间,把执行的机会让给其他线程,但是监控状态依然保持,到时候会自动恢复。调用sleep()不会释放对象锁。
- wait():是Object类的方法,对此对象调用wait()方法导致本线程放弃对象锁,进入等待此对象的等待池。
7.同步方法和同步代码块
- 同步方法默认用this或者当前类class对象作为锁
- 同步代码块可以选择以什么来加锁,比同步方法更细颗粒度。
8.Array和ArrayList
- Array:长度固定
可以包含基本类型和对象类型 - ArrayList:动态变化
值可以包含对象类型
ArrayList处理基本数据类型的时候,比较慢。
9.访问修饰符
10.抽象类和接口
- 抽象类可以在不提供接口方法实现的时候实现接口
- Java接口中声明的变量默认都是final的。抽象类可以包含非final变量
- Java中接口成员函数默认为public。抽象类可以是private,protected,public
- 接口是绝对抽象的,不可以被实例化,抽象类也不可以被实例化,但是,如果他包含main方法的话是可以被调用的
11.heap(堆)和stack(栈)的区别
- 堆:java中的堆是一个运行时数据区,类的对象从堆中分配空间。比如说:new等指令建立,不需要代码显示堆释放,由垃圾回收来负责
- 优点:可以动态分配内存大小,垃圾收集器会自动回收垃圾数据
- 缺点:存入速度慢
- 栈:其数据项的插入和删除操作只能在栈顶进行,后入先出。栈存放在一些基本类型的变量和对象。
- 优点:读取速度比堆快,仅次于寄存器,栈数据可以共享。
- 缺点:比堆缺乏灵活性,存在栈中的数据大小与生存期必须是确定的
12.接口和抽象类的区别
java提供和支持创建抽象类和接口。他们的实现有共同点,不同点在于:
- 接口中所有的方法隐含都是抽象的,而抽象类则可以同时包含抽象和非抽象的方法;
- 类可以实现很多接口,但是只可以继承一个抽象类;
- 类可以不实现抽象类和接口声明的所有方法,当然,在这种情况下,类也必须得声明成抽象的;
- 抽象类可以在不提供接口方法实现的情况下实现接口;
- java接口中声明的变量默认都是final的,抽象类可以包含非final的变量;
- java接口中的成员函数默认是public的,抽象类的成员可以是private,protected或者public;
- 接口是绝对抽象的,不可以被实例化,抽象类也不可以被实例化。
13.值传递和引用传递
- 值传递是对基本类型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量
- 引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本,并不是原对象本身
14.多线程中调用run()可start()方法
- 调用run方法来启动run方法,将会是串行运行
- 调用start方法,来启动run方法,将会是并行运行(多线程运行)
15.Thread和Runnable
- 因为java的单根继承,Thread占据了父类的名额,不如Runnable方便
- Thread类实现了Runnable
- Runnable启动时需要Thread类的支持(Runnable缺点)
- Runnable更容易实现多线程中资源共享(Runnable优点)
- 结论:建议实现Runnable接口来完成多线程
16.多线程信息共享中的粗粒度和细粒度
- 粗粒度:子线程与子线程之间、和main线程之间缺乏交流
- 细粒度:线程之间有信息交流通讯:
(1)通过共享变量达到信息交流通讯
(2)JDK原生库不支持发送消息(类似Mpi并行库直接发送消息) - 细粒度:
等待 通知/唤醒 终止
17.多线程中的互斥和同步
- 互斥:某一个线程运行一个代码块(关键区),其他线程不能同时运行这个代码块
- 同步:多个线程的运行,必须按照某一种规定的先后顺序来运行
- 互斥是同步的特例
- 互斥的关键字是synchronized
(1)synchronized代码块或者函数,只能一个线程进入
(2)synchronized加大性能负担,但是使用方便
18.Collection和Collections的区别
- Collection:集合类的上级接口,继承于他的接口主要有List和Set
- Collections:是针对集合的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作
19.链表和数组的区别
- 创建数组时,必须明确说明数组的长度(即数组中元素的个数),以便在内存中留出一块空间存放所有的数组元素,数组中各数据元素在内存中是顺序存放的
- 创建链表时,不需要给出链表中元素(称为节点)的个数,可以只创建一个链表的表头,其他元素在需要的时动态的创建并加入到链表,链表的数据元素在内存中不是连续存放的
本人才疏学浅,如有错误,烦请指出,谢谢!