1.Integer 与 int 的区别
int是基本类型(Primitive),Integer是引用类型(Warpper).
int是Java的原始数据类型,Integer是java为int提供的封装类.
int的变量不需要实例化,Interger的变量需要实例化.
int的默认值为0,Integer的默认值为null.
int一般做数值参数,Integer一般做类型转换.
2.&和&&的区别:
&和&&都是逻辑运算符号,&&又叫短路运算符
& 不管前面的条件是否正确,后面都执行
&& 前面条件正确时,才执行后面,不正确时,就不执行
3. ArrayList和Vector的区别?
(1).同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
(2).数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
4.HashMap哈HashTable的区别
相同点:都可以用来存储key-value的数据。
都是通过哈希表实现。
区别:HashMap是可以吧null作为key或value的, 而hashTable是不可以的。
HashMap是线程不安全的,效率较高。 而HashTable是线程安全的,效率较低。
5. string ,stringBuffer,stringBuilder的区别
1. String是内容不可变的字符串。底层使用了一个不可变的字符数组(final char[]).
StringBuffer和StringBuilder 是内容可以改变的字符串。底层使用可变的字符数组(没有使用final修饰).
2. 拼接字符串不能使用String进行拼接,要使用 StringBuffer或StringBuilder
3. StringBuilder是线程不安全的,效率较高;
StringBuffer是线程安全的,效率较低。
6. '==' 和 'equals' 的区别
'==':判断两个变量之间的值是否相等,基础数据类型变量:直接比较值
引用类型变量:比较对应的引用内存的首地址
'equals':比较两个对象长得是否一样,判断两个对象的某些特征是否一样
7. final, finally, finalize的区别:
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
内部类要访问局部变量,局部变量必须定义成final类型,例如,一段代码……
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用
8. Spring MVC、struts2 区别
(1).spring mvc 单例 非线程安全
struts2线程安全对每个请求都产生一个实例
(2).spring mvc的入口是servlet,而struts2是filter
spring 的前端总控制器为 DispatcherServlet
struts2 的前端总控制器为 FilterDispatcher
(3). 参数传递:struts是在接受参数的时候,
可以用属性来接受参数,这就说明参数是让多个方法共享的。
springmvc 用方法来接受参数
(4).spring mvc是基于方法的设计,而sturts是基于类
9. sleep() 和 wait() 的区别
sleep() 方法是线程类(Thread)的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程,等到休眠时间结束后,
线程进入就绪状态和其他线程一起竞争cpu的执行时间
wait()是Object类的方法,当一个线程执行到wait方法时,它就进入到一个和该对象相关的等待池,同时释放对象的机锁,
使得其他线程能够访问,可以通过notify,notifyAll方法来唤醒等待的线程
10. volatile与synchronized的区别
(1)volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;
synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。
(2)volatile仅能使用在变量级别;
synchronized则可以使用在变量、方法、和类级别的
(3)volatile仅能实现变量的修改可见性,不能保证原子性;
synchronized则可以保证变量的修改可见性和原子性
(4)volatile不会造成线程的阻塞;
synchronized可能会造成线程的阻塞。
(5)volatile标记的变量不会被编译器优化;
synchronized标记的变量可以被编译器优化
11.return,break,countiue
break:直接跳出当前的循环,从当前循环外面开始执行,忽略循环体中任何其他语句和循环条件测试。他只能跳出一层循环,如果你的循环是嵌套循环,那么你需要按照你嵌套的层次,逐步使用break来跳出.
countiue:也是终止当前的循环过程,但他并不跳出循环,而是继续往下判断循环条件执行语句.他只能结束循环中的一次过程,但不能终止循环继续进行。
return:结束当前的方法。