String str1= "123";
String str2 = "45";String str3 = "12345";String str4 =str1+str2;
String str5 ="123"+"45";System.out.println(str3 ==str4);
System.out.println(str3==str5);str3 str4 str5分别是什么类型?

解决方案 »

  1.   

    类型的话,都是String
    只是==操作符比较的是地址
    因为JVM会把String常量放到常量池中,所以相同的String常量,只有一个对象,不同的引用都会指向这个对象。     
    所以下面的 str31==str32 返回trueString str31 = "12345";
    String str32 = "12345";
    而且JVM会把【"123"+"45"】这种常量间的相加的结果,也会放入常量池,所以 str3 == str5 返回trueString str3 = "12345";
    String str5 ="123"+"45";
    另外JVM不会把含有变量的字符串【str1+str2】相加放入常量池,所以str4 == str3 返回falseString str1= "123";
    String str2 = "45";
    String str3 = "12345";
    String str4 = str1+str2;
      

  2.   

    http://bbs.csdn.net/topics/390085548
      

  3.   

    你要是单纯问类型,都是String类型。
      

  4.   

    用String关键字声明的变量当然是String类型的了,
    if(“123”==“123”)System.out.println("判断正确");
    字符串与字符串相等的逻辑判断就成了boolean型了
      

  5.   

    类型肯定是String类型,但是你最后的时候比较方法不对,应该用equals,你就能得到你想要的结果了
      

  6.   

    2楼回答的十分深入, 理论上Java的简单类型如int, double等都是直接值复制, 但string是个例外, JVM实现是用字符串池, 也就是同样的字符串其实际是引用的同一地址对象。
      

  7.   

    另外,不同对象比较请一定用equal方法, 直接用==比较string是很忌讳的
      

  8.   

    在字符串(String)里 ==比较的是数据的内存地址 equals比较的是内容的数值
    基本数据类型可以使用== 比较内容 
    js里没有equals 
      

  9.   

    有个方法 输出下就知道了 String...........