1.Java八大基本数据类型及其包装类
1字节:byte(Byte),boolean(Boolean),
2字节:char(Character),short(Short),
4字节:int(Integer),float(Float),
8字节:double(Double),long(Long)
2.String知识点
String不是基本数据类型,底层使用final修饰的char数组,因此其是不可变的,对某个字符串的一切改变操作都会创建另一个字符串对象,如进行拼接操作底层调用StringBuilder.append()方法进行拼接后调用toString()返回String对象。哈希表里key用String来表示可以提高效率,因为String的特性,除了第一次调用hashcode()会计算key的hash值,后面调用都不用重新计算,而是直接返回,因此提高了效率。
String的常用方法:length();charAt();toCharArray();indexOf();toUpperCase();toLowerCase();splite();trim();
replace();replaceAll();repalceFirst();subString();equalsIgnoreCase();contains();startsWith();endsWith();
3.StringBuilder和StringBuffer
StringBuilder:线程不安全,效率高,单线程环境下使用
StringBuffer:线程安全,效率低,底层实现基本与StringBuilder一致,有关方法上加了synchronized同步锁
4.“=”与“==”与“equals”的区别与联系
=是赋值运算符,将值赋给变量;
==用在基本类型之间,则是比较数值之间是否相等,==用在引用类型之间,则比较的是变量所指向地址是否相等
equals比较的是两对象是否相等,具体包括对象hash值是否相等,对象内容是否相等。所以在自定义对象中使用equals进行比较需重写hashcode()与方法
String str1 = "hello"; String str2 = "helloWorld"; String str3 = new String("helloWorld"); String str4 = "hello" + "World"; String str5 = str1 + "World"; System.out.println(str2 == str3);//1:false System.out.println(str2 == str4);//2:true System.out.println(str2 == str5);//3:false
new会创建会创建新对象,str3指向在堆上的对象地址,而str2指向常量池中的字符串地址,所以第一个false;
str4两个常量字符串进行+的拼接操作,在编译期Jvm会将两个字符串直接优化为一个字符串,那么就成了str4 = “helloWorld”,所以第二个true;
str5由于有字符串参与了拼接操作,那么底层会调用StringBuilder进行操作后返回的字符串对象是StringBuilder.toString()得到了,所以第三个false。
5.抽象类与接口的区别
- 抽象类和接口都不能直接实例化,抽象类要被子类继承,接口要被子类实现
- 抽象类的变量和方法可以是普通变量和普通方法,接口里的变量只能默认的是public修饰的公共的static静态变量,方法只能是默认的public方法
- 抽象类里的方法既可以实现也可以声明,接口内方法只能声明(jdk1.8新特性支持接口的默认方法(default修饰)实现与静态方法(static修饰)实现)
- 抽象类中可以有静态方法,接口中不能包含静态方法(jdk1.8支持了静态方法)
- 抽象类只能被单继承,接口可以被多类实现
- 抽象类可以有构造函数和实例方法,接口没有this指针,所以没有构造函数
6.Object类常用的方法
object.toString()
object.equals()
object.hashCode()
object.getClass()
object.notify()
object.notifyAll()
object.wait()
object.finalize()
7.final的用途
final修饰的类:不可被继承;
final修饰的常量:在编译阶段就会存入常量池;
final修饰的变量:(1)基本类型变量:值不可变 ;(2)引用类型变量:引用地址不可变,地址所指向的对象内容是可变的;
final修饰的方法:可被继承但不可被重写。
8. 获取类的class对象的几种方式
className.class();object.getClass();Class.forName(“class的全限定路径”)
9.java创建对象的几种方式
new className();(反射)class.newInstanse();object.clone();
10.&与&&的区别与联系
- 当两边都为布尔判断语句时,&与&&都表示逻辑与,两边都为true才通过
- &会执行完左右两边的逻辑判断语句,除此之外,还能进行位运算
- &&具有短路功能,当左边不成立的时候就不会再去执行右边了
11. jdk1.8新特性
1.支持接口的的默认方法实现,支持了接口内的静态方法以及实现
2.支持Lambda表达式(->)
3.支持函数式接口
4.支持构造器引用,方法引用,数组引用(::)
5.支持Stream API
6.支持增强类型推断
7.支持新的日期时间API
8.重复注解和类型注解