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对象?
short s1=1;
s1+=1;
运行正确,s1为2,但是:
short s1=1;
s1=s1+1;
编译出错.
为什么?2.String a1="abc";
String a2="abc";
String a3="abcd";
总共创建几个String对象?
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个
而对于s1=s1+1,右边部分先相加,由于s1是short型,类型提升后再相加,结果自然也是int型的,再赋值自然出错
2.我的答案是两个
a1和a2都向同一个常量
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指向的是同一个对象
感觉应该是int类型,试一下先
这样写 s1=short(a1 + 1);第二个是2个对象,因为在字符串池中已经有abc了
这样写 s1=short(a1 + 1); 第二个是5个对象,因为在字符串池中已经有abc了,还有3个对象引用
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个)
short s1=1;
s1=short(s1+1);//这样就可以了 加法对于比int小的整数类型自动转为int后进行运算,所以运算后右边结果是int
int赋给short就要强制转换了
Integer i=1;
s1+=i+1; //此句类似s1=(short)s1+i; s1的值为3
s1= (short) (s1+i);
String s = new String("xyz");创建了几个String Object答:两个,一个字符对象,一个字符对象引用对象
是不是这样?
关于第二个问题,怎么会是5个对象?JVM中一切都是对象的理解是这样的吗?在JVM中,引用是存放在栈中的,对象是存放在堆中的。按你的理论,引用也是对象的话,那么引用对象的引用算不算对象,是不是也要创建对象?这样什么时候难创建到头?