java概念误区对比大全

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/smd2575624555/article/details/80185467

java概念误区对比大全

run和start的区别,synchronized 和 Lock 的异同,int 和 Integer 有什么区别,抽象类与接口的区别,myBatis中#与$的区别,error和exception的区别,Overload和Override的区别,ArrayList和Vector的区别,数组和vector的区别

,

run和start的区别

start()

它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用。

run()

run()就和普通的成员方法一样,可以被重复调用。单独调用run()的话,会在当前线程中执行run(),而并不会启动新线程!

String 和 StringBuffer

首先它们都表示Java中的字符串,底层都是基于char类型的数组实现的

  1. 对于它们之间的区别,第一个底层开辟的内存空间的差距,对于String来说,每创建一个String类型的对象,底层都会开辟一个数组对象,这个数组对象多大空间完全取决于字符串的字符个数,而对于StringBuffer来说,每创建一个StringBuffer对象,底层也是会开辟一个char类型的数组,只是这个数组对象的空间大小不但要看字符串的字符个数,还要多预留16块缓冲区,用来追加信息,所以当我们不断的在字符串的后面追加新内容的时候,StringBuffer的效率更高。

  2. 对于String类里面那些改变字符串内容的方法都不会直接操作原本的字符串,而且将符合条件的字符串返回给我们,所以需要拿着一个变量去接收 比如substring方法。而对于StringBuffer里面的一些改变字符串的方法就能直接的对原本字符串进行操作,不需要再接收 比如reverse() insert() append()

注解Resource和Autowired区别


Autowired:注入 只找类型
Resource :注入 jdk注解

ArrayList和Vector的区别

  1. 同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
  2. .数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半

说出 ArrayList,Vector, LinkedList 的存储性能和特性

​ ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector 由于使用了 synchronized 方法(线程安全),通常性能上较 ArrayList 差,而 LinkedList 使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

HashMap和Hashtable的区别

  1. 历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现
  2. 同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
  3. 值:只有HashMap可以让你将空值作为一个表的条目的key或value

error和exception的区别

error 表示一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示可以处理的问题。

Overload和Override的区别

如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。

如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

数组和vector的区别

数组不可以随时改变大小,可以保存引用类型的数据和基本类型的数据。

Vector 可以随时改变大小,只可以保存引用类型的数据。

myBatis中#与$的区别

name="abc"
select * from user where name = #{name}; 

#{} 在动态解析的时候, 会解析成一个参数标记符。就是解析之后的语句是:

select * from user where name = ?; 

${}

name="abc"
select * from user where name = '${name}'; 

${}在动态解析的时候,会将我们传入的参数当做String字符串填充到我们的语句中,就会变成下面的语句

select * from user where name = "abc"; 

抽象类与接口的区别

答:抽象类与接口都用于抽象,但是抽象类(JAVA中)可以有自己的部分实现,而接口则完全是一个标识(同时有多重继承的功能)。
JAVA类实现序例化的方法是实现java.io.Serializable接口
Collection框架中实现比较要实现Comparable 接口和 Comparator 接口

int 和 Integer 有什么区别

​ Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。

​ Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。
​ 原始类型封装类,booleanBoolean,charCharacter,byteByte,shortShort,intInteger,longLong,floatFloat,doubleDouble
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。

​ 引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有

synchronized 和 Lock 的异同

主要相同点:Lock 能完成 synchronized 所实现的所有功能

主要不同点:Lock 有比 synchronized 更精确的线程语义和更好的性能。synchronized 会自动释放锁,而 Lock 一定要求程序员手工释放,并且必须在 finally 从句中释放。

猜你喜欢

转载自blog.csdn.net/smd2575624555/article/details/80185467