您现在的位置:首页 > 教案格式 > 正文

java 数组转字符串????回答主要是三个方面:(1)ha(7)

2018-01-23 01:02 网络整理 教案网

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()两个方法;