String a = "ab" ; String b = "a" + "b"; a == b吗?
在java中,对于字符串用==比较是比较字符串引用地址是否相同,而在编译后,String a 和 String b的字面量相同,所以引用的是同一个字符串对象,所以他俩是相同的,是true。
String 有长度限制吗?是多少?
String有长度限制,在编译期和运行期是不一样的。
在编译期,用CONSTANT_Utf8_info结构用于表示字符串常量的值,这个结构有长度限制,位65535
在运行期间,String的length参数的类型是int,所以String的长度等于int的最大范围也就是2^31 - 1
说几个常见的语法糖
泛型、条件编译、断言、可变参数、自动拆箱/装箱、枚举、内部类、lambda表达式
什么是泛型?有什么好处
泛型是JDK5引入的新特性,运行在定义类和接口的时候使用,在这个类和接口具体使用时使用类型擦除再进行替换。
好处:1.方便,可以提高代码的复用性。
2.安全,泛型再编译时就做类型检查,不会再程序执行时再转换类型出现类型不匹配,导致程序出错的可能性。
泛型中的KTVE Object等分别代表什么含义?
E - Element 在集合中使用
T -Type java类
K - Key 键
V - Value 值
N - Number 数值类型
? - 表示不确定的java类型
什么是API什么是SPI
API和SPI是相对的概念,API直接给开发人员使用,SPI被框架拓展人员使用
什么是反射
反射机制指的是在程序运行中还能获取到自身的信息。比如在Java中,只要给定类的名字,就可以通过反射机制获取类的所有属性和方法。
Java的反射可以:
- 在运行时判断任意一个对象所属的类
- 在运行时判断任意一个类具有的成员变量和方法
- 在运行时任意调用一个对象的方法
- 在运行时构造任意一个类的对象
Java序列化的原理是啥
序列化就是将对象转换位一种可传输格式的过程,是一种数据持久化的手段,不管是数据存储还是网络传输都需要序列化的能力。
在Java中,如果是String实现了Serializable接口的类,均可以使用Java的序列化机制,将类序列化位符合编码的数据流,然后通过InputStream和OutputStream将内存中的类持久化到硬盘或网络中。同时也可以使用反序列化将硬盘和网络中的字节码转换为内存中的类。