(1)String类型是使用一个final修饰的字符数组,因此它是不可变的。
private final char value[];
那把String定义为不可变有什么好处呢?
安全性 :当你在调用其他方法,比如调用一些系统级操作之前,可能会有一系列校验,如果是可变类的话,可能在你校验过后,其内部的值被改变了,可能引起严重的系统崩溃问题。
性能 :进行哈希计算时,由于不可变性,可以只计算一次哈希值,如果设计为可变,那么就需要多次重新计算哈希值,性能上会有损耗。
(2)StringBuilder与StringBuffer都继承自AbstractStringBuilder类,也采用字符数组存储,但未用final修饰,因此可变
2、线程安全性
(1)String变量因不可变,可看作常量,因此是 线程安全 的。
(2)StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是 线程安全 的。 (3)StringBuilder并没有对方法进行加同步锁,所以是 非线程安全 的。
(1)每次改变String后都会生成一个新的对象,因此性能损耗较大。
(2)StringBuffer每次都会对StringBuffer对象本身进行操作,性能较String更优。
(3)相同情况下使用StirngBuilder 相比使用StringBuffer 仅能获得10%~15% 左右的性能提升,但却要冒多线程不安全的风险。
4、使用场景
(1)操作少量数据用 String
(2)单线程下操作大量数据用 StringBuilder
(3)多线程下操作大量数据用 StringBuffer
5、其他
为何推荐使用StringBuilder而不是“+”做字符串连接?
在使用“+”做字符串拼接时,是会创建一个StringBuilder去完成拼接的,但是如果是在循环中进行操作, 就会每次创建一个新的StringBuffer ,性能上会有损耗,因此推荐直接使用StringBuffer。
1、 java.util.Collection 是一个 集合接口 。很多类包括map,set等都实现了这个接口。
2、 Collections 是一个 工具类 ,不能实例化,提供了有一些方法:sort等。
1、char属于 固定长度 字符,而varchar属于 可变长度 字符,都可以用来存储字符串。
2、使用char时,如果输入的数目 小于 指定的数目,会在后面 补空格 ; 大于 指定的数目时,会 截取后面的部分 。
https://ask.qcloudimg.com/htt...3、varchar使用时, 输入长度+1即为实际长度 ,多出来的一个字节用于保存实际使用了多大的长度。
1、 toString()方法 : toString方法 返回该对象的字符串表示,其实该字符串内容就是 对象的类型+@+内存地址值
2、 equals()方法 : 判断这两个对象是否是相同的,如果不进行重写,只会判断 对象的地址是否相同 ,即如果不是同一个对象,就会返回false。
3、 hashCode()方法 :将十六进制地址值通过哈希算法换算为整值。
4、 getClass()方法 :获取对象的字节码文件(该对象运行时的类)。
Java中的内存泄漏指的是对象虽然不再被使用,但它们仍然被引用。
Vector v=new Vector(10); for (int i=1;i<100; i++) { Object o=new Object(); v.add(o); o=null; }
比如在上述这个例子中,Object对象o被加入了Vector对象v中,虽然o修改为null,这种情况下,v依然引用对象,那么这个对象对于GC来说,就是不可回收的,即 产生了内存泄漏 。
1、 Error (错误)是系统中的错误,程序员是不能改变的和处理的,是在程序编译时出现的错误,只能通过修改程序才能修正。( 水池 )
2、 Exception (异常)表示程序可以处理的异常,可以捕获且可能恢复。( 水 )
(1) CheckedException :(编译时异常) 需要用try——catch显示的捕获,对于可恢复的异常使用CheckedException。
(2) UnCheckedException (RuntimeException):(运行时异常)不需要捕获,对于程序错误(不可恢复)的异常使用RuntimeException。
比如:
NullpointerException:空指针异常(我目前遇见的最多的)
IndexOutOfBoundsException:索引超出边界异常
注: ClassNotFoundException 与 NoClassDefFoundError 的区别:
(1) ClassNotFoundException 是指在类加载器的加载阶段找不到类信息。如Class.forName(),ClassLoader.loadClass()等。
(2) NoClassDefFoundError 是指在运行使用阶段时却出现了问题。如实例化依赖类找不到(删除了.class文件)或者类本身就初始化失败了等。