1.
short s1=1;
s1+=1;
运行正确,s1为2,但是:
short s1=1;
s1=s1+1;
编译出错.
为什么?2.String a1="abc";
  String a2="abc";
  String a3="abcd";
  总共创建几个String对象?

解决方案 »

  1.   

    问题1+=运算符应该会自己转换类型,但s1=s1+1;不会自动转型,short类型计算时自动转为int,所以要加个强制类型转化问题2我觉得是5个
      

  2.   

    第一题 s1 = s1 + 1;  "="右边算出来是int 当然要强制转换第二题 2个
      

  3.   

    short s1=1; //记住s1是short类型
    s1+=1; 
    运行正确,s1为2,但是: 
    short s1=1; 
    s1=s1+1; //s1是short类型,1是int类型,两者相加应该自动转为int类型,但左边赋值的s1是short类型
    编译出错. 
    为什么?    public class a{
      public static void main(String [] args){
     String a1="abc"; 
      String a2="abc"; 
      String a3="abcd"; 
     if(a1==a2)
      {System.out.println("2个");}
      else
      {System.out.println("3个");}
      }
      }
    F:\>javac a.java
    F:\>java a
    2个
      

  4.   

    1.我的理解是+=的时候会根据左参数强制类型转换
    而对于s1=s1+1,右边部分先相加,由于s1是short型,类型提升后再相加,结果自然也是int型的,再赋值自然出错
    2.我的答案是两个
    a1和a2都向同一个常量
      

  5.   

    1. 
    short s1=1;  
    s1+=1; //这里表示的是计算后赋值,个人比较同意2楼的说法因为+=是一个操作符,所有就和s1=1一样自动将int型转为short型了
    运行正确,s1为2,但是: 
    short s1=1; 
    s1=s1+1; //因为这里是s1+1是一个表达式,java中不会对一个表达式进行自动转型所以编译不通过 
    为什么? 2.至于这里是创建了3个引用,对象应该是2个,因为按照栈的机制分析a1呵a2指向的是同一个对象
      

  6.   

    你说s1+=1;后,s1是short类型???
    感觉应该是int类型,试一下先
      

  7.   

    第一个要强制转换
    这样写  s1=short(a1 + 1);第二个是2个对象,因为在字符串池中已经有abc了
      

  8.   

    第一个要强制转换 
    这样写  s1=short(a1 + 1); 第二个是5个对象,因为在字符串池中已经有abc了,还有3个对象引用
      

  9.   

    s1+=1后s1是short类型,不过却不是很明白
      

  10.   

    short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。
      

  11.   

    short s1=1; 
    s1+=1;
    //这种其中隐含了一步强制转换把 INT 型的
    //所以以上表达式等于是 s1=(short)(s1+1); 
     
    short s1=1; 
    s1=s1+1; 
    //这里的这个 1 是INT 型的 一个INT + 一个SHORT 结果是一个INT 所以出现 类型转换错误2.String a1="abc"; 
      String a2="abc"; 
      String a3="abcd"; 其中创建了
    3个引用 分别是a1,a2,a3 所引用的地址
    2个对象 "abc" , "abcd"。
    所以结果应该是5个对象(JVM中一切都是object,引用也是一种对象所以一共5个)
      

  12.   

    第一题我也被考过 当时不会short 谁用啊~~
      

  13.   

    2楼正解
    short s1=1; 
    s1=short(s1+1);//这样就可以了 加法对于比int小的整数类型自动转为int后进行运算,所以运算后右边结果是int
                     int赋给short就要强制转换了 
      

  14.   

    你的理解应该是正确的:Short s1=1;
    Integer i=1;
    s1+=i+1; //此句类似s1=(short)s1+i; s1的值为3
    s1= (short) (s1+i);
      

  15.   

     
    String s = new String("xyz");创建了几个String Object答:两个,一个字符对象,一个字符对象引用对象
    是不是这样?
      

  16.   


    关于第二个问题,怎么会是5个对象?JVM中一切都是对象的理解是这样的吗?在JVM中,引用是存放在栈中的,对象是存放在堆中的。按你的理论,引用也是对象的话,那么引用对象的引用算不算对象,是不是也要创建对象?这样什么时候难创建到头?