有些知识知道但记不住 就算有些问题用到了 上网百度一下就解决了 所以很少注重这些最基础的东西 结果悲催的就是面试的时候 一问三不知
所以 以后有空多总结些知识点还是很有用的
1.stringbuffer和stringbuilder的区别
三者在执行速度方面的比较:StringBuilder > StringBuffer > String
前两者是变量 String是常量
String s = “abc”;开辟一块地址存放abc
s = s + “def”; 在内存中会再开辟一块地址存放abcdef
而stringbuffer s 是变量 只更改内容 不改变内存
2.hashcode方法的作用
hashcode这个方法是用来鉴定2个对象是否相等的。
那你会说,不是还有equals这个方法吗?不错,这2个方法都是用来判断2个对象是否相等的。但是他们是有区别的。
一般来讲,equals这个方法是给用户调用的,如果你想判断2个对象是否相等,你可以重写equals方法,然后在代码中调用,就可以判断他们是否相等了。简单来讲,equals方法主要是用来判断从表面上看或者从内容上看,2个对象是不是相等。举个例子,有个学生类,属性只有姓名和性别,那么我们可以认为只要姓名和性别相等,那么就说这2个对象是相等的。
hashcode方法一般用户不会去调用,比如在hashmap中,由于key是不可以重复的,他在判断key是不是重复的时候就判断了hashcode这个方法,而且也用到了equals方法。这里不可以重复是说equals和hashcode只要有一个不等就可以了!所以简单来讲,hashcode相当于是一个对象的编码,就好像文件中的md5,他和equals不同就在于他返回的是int型的,比较起来不直观。我们一般在覆盖equals的同时也要覆盖hashcode,让他们的逻辑一致。举个例子,还是刚刚的例子,如果姓名和性别相等就算2个对象相等的话,那么hashcode的方法也要返回姓名的hashcode值加上性别的hashcode值,这样从逻辑上,他们就一致了。
要从物理上判断2个对象是否相等,用==就可以了。
这种区别简单来说hashcode不相等 equals必定不等,hashcode相等,equals不能确定 所以要判断需要先判断hashcode,在hashcode相等的情况下再判断equals是不是相等
hashcode是为了尽量少的调用equals方法,如果向一个散列中插入一个散列中插入没有的对象,可能想到的方法就是用equals挨个比较,如果散列中已经存在成千上万条数据,那效率会很低,hashcode根据对象存储的地址存储字段等等原因生成一个int型数值,根据数值先行比较,然而并不能将hashcode等同于equals 在equals方法没有被覆写的情况下比较的是内存地址
3.==和equals的区别
==是判断两个变量或实例是不是指向同一个内存空间 equals是判断两个变量或实例所指向的内存空间的值是不是相同 除了String和封装器,equals()和“==”没什么区别 String和封装器重写了equals(),所以在这里面,equals()指比较字符串或封装对象对应的原始值是否相等,”==”是比较两个对象是否为同一个对象
==是判断两个对象是否是同一个对象
equals是进行值的判断
String a = new String(“aaa”);
String b = new String(“a”);
b += “aa”;
则 a==b //错误
a.equals(b)//正确
4.java的基本数据类型
byte(字节) 8 -128 - 127 0
shot(短整型) 16 -32768 - 32768 0
int(整型) 32 -2147483648-2147483648 0
long(长整型) 64 -9233372036854477808-9233372036854477808 0
float(浮点型) 32 -3.40292347E+38-3.40292347E+38 0.0f
double(双精度) 64 -1.79769313486231570E+308-1.79769313486231570E+308 0.0d
char(字符型) 16 ‘ \u0000 - u\ffff ’ ‘\u0000 ’
boolean(布尔型) 1 true/false false
5.线程的安全和并发 有哪几种加锁的方式