2019年9月17日随笔

和equals的区别
(1)

1)基本类型:比较是否相等
2)引用类型:比较内存地址是否相等
(2)equals
1)引用类型:默认情况下。比较内存地址值是否相等。
重写后表示,可以表示两对象的内容是否相等

jvm缓存部分基本类型常用的包装对象,如integer缓存是-128~127

怎么理解javabean?它有哪些特点?
1.要求这个类必须拥有一个公共的空参数的构造方法,外界可以访问;
2.它如果有属性(成员变量),必须全部私有;
3.对外提供公共的get或者set方法,并且方法的命名要遵守一定的规则;

怎么对构造函数的理解?什么是构造函数?它有什么用?
(1)构造函数是创造一个类的根本,也相当于一个类的进口
(2)当你创造一个类后,如果需要调用这类,就需要在其他类中new这个类,在new这个类就相当于调用类中
的无参构造,要想类不被别人调用,就私有化无参构造
(3)想给一个类赋值,有两种方法:1)通过有参构造进行直接赋值 2)通过get set方法进行赋值
如果想对javabean进行赋值只提供了get 和 set方法

在成员变量和局部变量的区别?
(1)从定义上来讲
局部变量定义在函数中,成员变量定义在类中。
(2)从内存存储上来讲
局部变量随着函数的运行会在栈内存中出现,局部变量存储在占内存中。
成员变量会随着对象的出现在堆中存在,成员变量存储在堆内存中。
(3)从初始值上来讲
局部变量在定义是需要指定初始值(局部变量没有默认值)

优先级:在类中和该类的一个函数中,同时存在一个相同类型相同名称的变量,在函数被执行时,函数中优先
使用定义在函数中的变量(局部变量)

跳出循环语句有哪些方法?
(1)break是终止循环
(2)continue是跳出此段循环

java虚拟机的内存是怎么划分?
(1)堆:存储对象或数组,new出来的对象都存储在堆内存中
(2)栈:运行时使用的内存,就是一些方法
(3)方法区:
(4)本地方法栈:
(5)寄存器:给cpu使用,和开发无关

常量池,通过一种方法调用可以将字符串放入常量池中(.intern)
java6和6之前,常量池是存放在方法区中的。
java7,将常量池是存放到了堆中,常量次就相当于是在永久代中,所以永久代放在堆中。
java8之后,取消了整个永久代区域,取而代之的是元空间,没有再对常量池进行调整了

什么是匿名对象?它是怎么用?
匿名对象就是将对象创建出来,但是没有将它的地址赋值给某个变量
使用方法:匿名对象通常是在对象只需要访问成员一次的情况下使用

集合和数组的区别?
(1)从长度来讲
数组:需要固定长度
集合:长度可以改变,可以根据保存的数据进行扩容集合的数据扩容:集合的底层是数组,数组的大小是不能改变的
当容器内存不足时,就进行扩容,它的方法是从新分配一个新数组,然后将数据复制到新数组,拼接到后面。
ArrayList默认初始容量为10
线程不安全,查询速度快
底层数据结构是数组结构
扩容增量:原容量的0.5倍
如Arraylist的容量为10,一次扩容是容量为15
vector:线程安全,但是速度慢
底层数据结构是数组结构
加载因子为1:即当 元素个数超过容量长度时,进行扩容
扩容:原容量的1倍
如vector的容量为10,一次扩容是容量为20
set(集合)元素无序的、不可重复
Hasheset:线程不安全,存取速度快
底层实现是一个hashmap(保存数据),实现set接口
默认初始容量为16(为何是16,见下方对hashmap的描述)
加载因子为0.75:即当元素个数超过容量长度0.75倍时,进行扩容
扩容增量:原容量的1倍
如hashset的容量为16,一次扩容后是容量为32
Map是一个双列集合
hashmap:默认初始容量为16
(为何是16:2*4,可以提高查询效率,另外,32=16<<1->至于详细的原因可另行分析,后分析源代码)
加载因子为0.75:即当元素个数 超过容量长度的0.75倍时,进行扩容
扩容增量:原容量的1倍

你可能感兴趣的:(2019年9月17日随笔)