day38

1、String 和 StringBuffer 的区别

JAVA 平台提供了两个类:String和 StringBuffer,它们可以储存和操作字符串,即包含多个 字符的字符数据。这个 String 类提供了数值不可改变的字符串。而这个 StringBuffer 类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用 StringBuffer。典型地, 你可以使用 StringBuffers 来动态构造字符数据。另外,String 实现了 equals 方法,new String(“abc”).equals(newString(“abc”)的结果为true,而StringBuffer没有实现equals方法, 所以,newStringBuffer(“abc”).equals(newStringBuffer(“abc”)的结果为false。   接着要举一个具体的例子来说明,我们要把1到100的所有数字拼起来,组成一个串。StringBuffer sbf = new StringBuffer(); for(int i=0;i<100;i++) {       sbf.append(i); } 上面的代码效率很高,因为只创建了一个 StringBuffer对象,而下面的代码效率很低,因为 创建了101个对象。String str = new String();  for(inti=0;i<100;i++) {        str = str + i;} 在讲两者区别时,应把循环的次数搞成10000,然后用endTime-beginTime 来比较两者执 行的时间差异,最后还要讲讲 StringBuilder与 StringBuffer 的区别。   String 覆盖了 equals 方法和 hashCode 方法,而 StringBuffer没有覆盖 equals 方法和 hashCode 方法,所以,将 StringBuffer对象存储进 Java集合类中时会出现问题。

2、什么是 java 序列化,如何实现 java 序列化?或者请解释 Serializable接口 的作用。

  我们有时候将一个 java 对象变成字节流的形式传出去或者从一个字节流中恢复成一个 java 对象,例如,要将 java 对象存储到硬盘或者传送给网络上的其他计算机,这个过程我们可 以自己写代码去把一个 java 对象变成某个格式的字节流再传输,但是,jre 本身就提供了这 种支持,我们可以调用 OutputStream 的 writeObject 方法来做,如果要让 java 帮我们做, 要被传输的对象必须实现serializable 接口,这样,javac 编译时就会进行特殊处理,编译 的类才可以被 writeObject方法操作,这就是所谓的序列化。需要被序列化的类必须实现 Serializable 接口,该接口是一个 mini 接口,其中没有需要实现的方法, implementsSerializable 只是为了标注该对象是可被序列化的。     例如,在 web 开发中,如果对象被保存在了 Session 中,tomcat 在重启时要把 Session 对 象序列化到硬盘,这个对象就必须实现 Serializable 接口。如果对象要经过分布式系统进行网络传输或通过 rmi 等远程调用,这就需要在网络上传输对象,被传输的对象就必须实现 Serializable 接口。

3、垃圾回收的优点和原理。并考虑 2 种回收机制。

Java 语言中一个显著的特点就是引入了垃圾回收机制,使 c++程序员最头疼的内存管理的 问题迎刃而解,它使得 Java 程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java 中的对象不再有"作用域"的概念,只有对象的引用才有"作用域"。垃圾回 收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独

的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象

进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。 回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。

猜你喜欢

转载自blog.csdn.net/mathyoung/article/details/80948684