java 数组转字符串????回答主要是三个方面:(1)ha(7)
3)修饰类:不能被继承
修饰形参:final形参不可变
1)都是final类,都不允许被继承;
2)String长度是不可变动的,StringBuffer、StringBuilder长度是可变的;
3)StringBuffer是线程安全的(在StringBuilder方法上添加关键字synchronized),StringBuilder线程不安全
4)StringBuilder比StringBuffer拥有更好的性能;
5)如果一个String类型的字符串,在编译时就可以确定是一个字符串常量,则编译完成之后,字符串会自动拼接成一个常量,此时String的速度比StringBuilder和StringBuffer的性能好的多。
String不变性的理解
1)String类是被final进行修饰的,不能被继承;
2)在用+号连接字符串的时候会创建新的字符串;
3)String s=new String(“helle world”);可能创建两个对象也可能创建一个对象。如果静态区中有“hello world”字符串常量对象的话,则仅仅在堆中创建一个对象。如果静态区没有“hello world”对象,则在堆和静态区中都创建对象。
4)在java中,通过使用“+”符合来链接字符串的时候,实际底层会转成通过StringBuilder实例的append()方法实现。
有重写这些方法。当equals方法被重写,通常有必要重写hashCode方法,才能保证相等。
如:object1.equal(object2)为true, object1.hashCode==object2.hashCode()为true
两个对象内容相等,那么hashCode指向的是同一个内容,返回的哈希值是相同的;
object1.hashCode==object2.hashCode()为false时,object1.equal(object2)为false
两个hashCode不等,那么两个对象的内容必然不同(每个对象的哈希值是唯一的);
object1.hashCode==object2.hashCode()为true时,object1.equal(object2)不一定为true;
比如hashmap,hashCode是数组的下标,但是会产生hash冲突,比如一个数组下标后连接一个链表;
重写equals不重写hashcode会出现什么问题??
在存储散列集合时(如set类),如果原对象.equals(新对象),但没有对hashcode重写,即两个对象拥有不同的hashcode,则在集合中会存储两个值相同的对象,从而导致混淆,因此在重写equals方法时,必须重写hashcode方法。
需要重写equals方法和hashcode,必须保证对象的属性改变时,其hashcode不能改变。
Java序列化定义
将哪些实现Serializable接口的对象转换成一个字节序列,并能够在以后将这个字节序列完全恢复为原来的对象,序列化可以弥补不同操作系统之间的差异。
Java序列化的作用
(1)Java远程方法调用(RMI)
(2)对javaBeans进行序列化
如何实现系列化和反序列化
实现序列化
(1)实现Serializable接口
1)该接口只是一个可序列化的标志,并没有包含实际的属性和方法;
2)如果不在该方法中添加readObject()和writeObject()方法,则采取默认的序列化机制,如果添加了这两个方法之后还想利用java默认的序列化机制,则在这两个方法中分别调用defaultReadObject()和defaultWriteObject()两个方法;
这也是一种方法