Java基础面试题(==equals区别,StringBuffer/StringBuilder)

1. JDK 和 JRE 的区别是什么?

1)JDK:Java Development Kit

的简称,java 开发工具包,提供了 java 的开发环境和运行环境。
2)JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境。
总结: JDK 包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具。简单来说:如果你需要运行 java 程序,只需安装 JRE 就可以了,如果你需要编写 java 程序,就需要安装 JDK。

2.Java中equals和==的区别
==比较的是2个对象的地址,而equals比较的是2个对象的内容。

public class TestString {
   public static void main(String[] args) {
      String s1 = "Monday";
      String s2 = "Monday";
      if (s1 == s2)
          {
             System.out.println("s1 == s2");}
      else{
          System.out.println("s1 != s2");}
   }
}
 
//编译并运行程序,输出:s1 == s2说明:s1 与 s2 引用同一个 String 对象 -- "Monday"!
public class TestString {
public static void main(String[] args) {
String s1 = "Monday";
String s2 = new String("Monday");
if (s1 == s2)
{System.out.println("s1 == s2");}
else
{System.out.println("s1 != s2");}
if (s1.equals(s2)) {System.out.println("s1 equals s2");}
else{
System.out.println("s1 not equals s2");}
}
}
//我们将s2用new操作符创建
//程序输出:
//s1 != s2
//s1 equals s2
//说明:s1 s2分别引用了两个"Monday"String对象
 

字符串缓冲池
原来,程序在运行的时候会创建一个字符串缓冲池当使用 s2 = "Monday" 这样的表达是创建字符串的时候,程序首先会在这个String缓冲池中寻找相同值的对象,在第一个程序中,s1先被放到了池中,所以在s2被创建的时候,程序找到了具有相同值的 s1
将s2引用s1所引用的对象"Monday"
第二段程序中,使用了 new 操作符,他明白的告诉程序:"我要一个新的!不要旧的!"于是一个新的"Monday"Sting对象被创建在内存中。他们的值相同,但是位置不同,一个在池中游泳一个在岸边休息。

4.String 和 StringBuffer、StringBuilder 的区别是什么?

整体来说,分为两部分来比较
(1)可变性:String vs StringBuffer/StringBuilder
String:不可变
StringBuffer/StringBuilder:可变
所以,如果在一个循环操作,不断对字符串进行拼接操作,那么使用String会不断创建新的对象,这个效率会比较低,在这种情况下,建议采用StringBuffer
(2)线程安全性:StringBuffer vs StringBuilder
StringBuffer:线程安全(对方法加了同步锁或者对调用的方法加了同步锁)
StringBuilder:线程不安全
相比来说,StringBuilder的性能要高于StringBuffer,所以在无状态的模式下,建议采用StringBuilder
(3)性能:
每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象。
StringBuffer 每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用
StirngBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。
(4)总结:
1. 操作少量的数据 = String
2. 单线程操作字符串缓冲区下操作大量数据 = StringBuilder
3. 多线程操作字符串缓冲区下操作大量数据 = StringBuffer


 


 

你可能感兴趣的:(面试题,java,面试,eclipse)