- 说明String 和StringBuffer的区别
答:String是不可变对象,一旦创建就不能修改它的值,对于已经存在的String对象的修改都是重新创建了一个String对象,把新的值存入; String 是final类,不能被继承!(效率低下,浪费大量优先的内存空间) 而StringBuffer 是可以修改的对象,修改时并不会像创建String对象一样重新创建并复制,它只能通过构造函数创建, 在创建后会在内存中分配空间,初始化会保存一个null,向他赋值的时候可以通过它的append方法。每个StringBuffer对象都有一定的缓冲区容量, 当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。有利于线程安全! 另外:StringBuilder:速度快,但是线程不安全。
- 关于Static关键字用法
如果没有static关键字,就必须首先创建对象,然后通过对象使用他!
//静态不能直接访问非静态,因为内存中先有静态内容,后有非静态内容。(此时还未成为对象,没有成员变量,所以不能访问)
静态方法中不能用this对象,而this代表当前对象,通过谁调用的方法谁就是对象。所以不用this。
根据类名称访问静态成员变量的时候,全程和对象没关系,直接进入方法区中的静态区。
-
重载和重写的区别
重载overload:方法的名称一样,参数列表不一样
重写override:方法的名称一样,参数列表也一样(用在继承关系中) -
Int与Interger
int 是基本数据类型,Integer 是int的一个包装类,他是类不是基本数据类型,他的内部其实包含一个int型的数据
对象封装有很多好处,可以把属性也就是数据跟处理这些数据的方法结合在一起,比如Integer就有parseInt()等方法来专门处理int型相关的数据,另一个非常重要的原因就是在Java中绝大部分方法或类都是用来处理类类型对象的,如ArrayList集合类就只能以类作为他的存储对象,而这时如果想把一个int型的数据存入list是不可能的,必须把它包装成类,也就是Integer才能被List所接受。所以Integer的存在是很必要的。
-
集合和数组的区别:
集合是java中提供的一种容器,可以用来存储多个数据。
数组的长度是固定的,集合的长度是可变的。 数组中存储的是同一类型的元素,可以存储基本数据类型值,集合存储的都是对象!而对象的类型可以不一致,在开发中一般当对象多的时候,使用集合进行存储。
-
解释一下为什么要用迭代器
Java集合框架的集合类,我们有时候称之为容器。容器的种类有很多种,比如ArrayList、LinkedList、HashSet...,每种容器都有自己的特点,ArrayList底层维护的是一个数组;LinkedList是链表结构的;HashSet依赖的是哈希表,每种容器都有自己特有的数据结构。
因为容器的内部结构不同,很多时候可能不知道该怎样去遍历一个容器中的元素。所以为了使对容器内元素的操作更为简单,Java引入了迭代器模式! 把访问逻辑从不同类型的集合类中抽取出来,从而避免向外部暴露集合的内部结构。
- HashMap和HashSet区别:
1.HashMap实现了Map接口 | HashSet实现了Set接口
2.HashMap储存键值对 | HashSet仅仅存储对象
3.使用put()方法将元素放入map中 | 使用add()方法将元素放入set中
4.HashMap中使用键对象来计算hashcode值 | HashSet使用成员对象来计算hashcode值,对于两个对象来说hashcode可能相同,所以equals()方法用来判断对象的相等性,如果两个对象不同的话,那么返回false
5.HashMap比较快,因为是使用唯一的键来获取对象 | HashSet较HashMap来说比较慢
- 线程与进程区别:
进程:
是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程。
线程:
线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程至少有一个线程。如果该进程有多个线程,则该应用程序可称为多线程程序。