前言
很多基础性的原理等等什么的,不在赘述,网上很多相关内容,这里仅仅是总结性并且很快能看完的结论.
java中==和equals和hashCode的区别
- ==是对内存地址的比较,对比两个变量是否相同, Object默认的equals方法,是对比对象的地址,和==的结果是相同的的.但是在很多Obj的子类上面,很多都是覆写了equals方法的,比如String 不再是对比地址,而且对比具体的值.其他类,在没有覆写equals的话,使用的是obj的equals方法,直接对比复合数据类型的地址.
- hashcode 会有一个大前提, 因为hashcode生成的是一个离散的数字,会有重复的概率,会首先得到两个结论
(1)如果两个复合数据类型调用equals相同,那么生成的hashcode码是一定相同的.(2)如果两个复合数据类型调用equals不同,那个生成的hashcode码不一定相同.
- 在Java具体中使用,体现在HashMap上面, HashMap在放入数据的时候首先会匹配hashcode,如果已经不存在相同的hashcode则直接放入,如果有相同的hashcode,会再去匹配的equals方法,如果不相同则放入其中,否则就不放入其中.同样,在get的时候会根据key.hashCode()算出数组下标,然后再看equels如果相同,就找到目标了,具体更多的HashMap数据存取的细节,就不在这里赘述了.
int与integer的区别
- int 是基本数据类型
- integer是对int的装箱
- integer的默认值是null,int的默认值是0
- integer实际是对int的引用,当new 一个Integer对象的时候 实际是生成一个指针 指向此对象,而int则是直接储存对象.
谈谈对java多态的理解
- 首先,多态存在的几个必要条件
(1).要有继承 (2).要有重写 (3).父类引用指向子类引用
- 实际使用场景
例如同样的父类引用,调用方法A,但是在不同的场景,执行不同的动作,例如同样的F1按键,在主界面是帮助,在聊天界面是头像,在设置界面是关于软件.
- 多态的好处
可替换,可扩展,接口性,灵活,简化.
String、StringBuffer、StringBuilder区别
- 首先从速度上面来说:StringBuilder->StringBuffer->String
- 其次StringBuffer对比StringBuilder来说StringBuffer是线程安全
,里面很多方法是Synchronized - 那StringBuilder的原理又是怎么样的?StringBuilder内部有一个字符数组,每次组装, 如果容量不够,就扩大容量,然后往里面添加字符,组装出想要的字符串.
- 最后来说这个String,这个要分jdk版本来说,在1.5以前,String的拼接,其实每次都是创建一个新的String对象来处理的,但是在1.5以后,每次+的时候,创建的是StringBuilder去append的,这也是为什么直接使用加号组装字符串速度最慢的原因
继续更新中...