关于String的题目

String内存位置、StringBuffer、StringBuilder区别

  • new String(),其实是在堆中新创建一个空间来存储地址,该地址指向常量池

通过六个题目彻底掌握String笔试面试题

  • 常量+常量->常量池
  • 变量+常量->堆

我自己的理解可能有误,例如name="L",此时我的name指向的是常量池的,所以拿name去==比较时他是常量池的
而我把name作为变量与其他String相加的时候,它就是作为变量相加,所以相加后的结果就为堆

其实也就第四题比较疑惑

/*--------------------------1-----------------------------*/
    public static void main(String[] args) {   
            String a = "a1";   
            String b = "a" + 1;   
            System.out.println(a == b);//true
        }  
/*--------------------------2-----------------------------*/
    public static void main(String[] args) {   
            String ab = "ab";   
            String b = "b";   
            String ab2 = "a" + b;   
            System.out.println(ab == ab2);//false   
        }  
/*--------------------------3-----------------------------*/
    public static void main(String[] args) {   
            String ab = "ab";   
            final String b = "b";   
            String ab2 = "a" + b;   
            System.out.println(ab == ab2);//true
        }  
/*--------------------------4-----------------------------*/
    public static void main(String[] args) {   
            String ab = "ab";   
            final String b = getBB();   
            String ab2 = "a" + b;   
            System.out.println(ab == ab2);//!!!!!!!!!!false,因为getBB就是堆中的,即便定义为final他也不是常量
        }   
      
        private static String getBB() {   
            return "b";   
        }  
/*--------------------------5-----------------------------*/
    private static String ab = "ab";   
      
    public static void main(String[] args) {   
        String s1 = "a";   
        String s2 = "b";   
        String s = s1 + s2;   
        System.out.println(s == ab);//false   
        System.out.println(s.intern() == ab);//true   
    }  
/*--------------------------6-----------------------------*/
    private static String ab = new String("ab");   
  
    public static void main(String[] args) {   
        String s1 = "a";   
        String s2 = "b";   
        String s = s1 + s2;   
        System.out.println(s == ab);//false  
        System.out.println(s.intern() == ab);//false   
        System.out.println(s.intern() == ab.intern());//true   
    }
posted @ 2020-07-30 14:47  lwxx  阅读(116)  评论(0)    收藏  举报