JAVA----- String方面的面试举例

[img]
JAVA----- String方面的面试举例
[/img]

 package com.test;

 public class StringTest

{

  public static void main(String[] args)

 {

(1)   String s=new String("abc");

  (2) String s1="abc";

  (3) String s2=new String("abc");

 (4) System.out.println(s==s1);

 (5) System.out.println(s==s2);

  (6) System.out.println(s1==s2); 

 }


执行到(1)时候,在内存中共分配几个对象?答案是2个i对象,但有的同学会错误的理解为

在堆里分配个abc这个对象,在栈里分配个s空间对象,实际上这是错误的。s只是一个实例,是一个存放对象引用的标签变量,像C语言里的指针一样,所以说JAVA是有指针的。实际上是有一个String pool的,叫做串池的,首先看String pool中有没有abc这个串,发现没有,所以就把abc放到String pool中了,然后new String("abc");这句就是在JAVA的堆内存中分配abc这个对象,所以是2个对象,而s指向堆里的abc串。

OK,

下面我们看(2),(2)就不分配对象了,因为s1直接指向,String pool中的abc了,因为String pool中已经存在了abc了。

(3)分配一个对象abc,s2指向这个新分配的对象.

(4)(5)(6)都为false,因为s,s1,s2指向了不同的对象



equals方法比的是内容,只要内容相同了,就返回true,而==比的是,是不是指向同一个对象

你可能感兴趣的:(java)