代码如下
class a{public static void main(String []args){ Object g="ttt";
String h="lll";
g+=h;}
}
编译报错 不兼容的类型。但我知道 复合赋值表达式 会有个强制转换的过程 会把右边运算结果转变为左边的变量的类型则g+h本应该是个String类型,现在应该是Object类型,但是String是Object的子类 ,将子类强制转换成父类 我个人认为不应该存在问题的 可是编译却报错 于是我改成如下形式
class a{public static void main(String []args){ Object g="ttt";
String h="lll";
g=(Object)(g+h);}
}
编译却通过了 这个让我很是纠结为什么会这样 难道 a=(强制类型转换)a+b不等于 a+=b吗?? 高手给我点启发啊 郁闷
class a{public static void main(String []args){ Object g="ttt";
String h="lll";
g+=h;}
}
编译报错 不兼容的类型。但我知道 复合赋值表达式 会有个强制转换的过程 会把右边运算结果转变为左边的变量的类型则g+h本应该是个String类型,现在应该是Object类型,但是String是Object的子类 ,将子类强制转换成父类 我个人认为不应该存在问题的 可是编译却报错 于是我改成如下形式
class a{public static void main(String []args){ Object g="ttt";
String h="lll";
g=(Object)(g+h);}
}
编译却通过了 这个让我很是纠结为什么会这样 难道 a=(强制类型转换)a+b不等于 a+=b吗?? 高手给我点启发啊 郁闷
是先把b转化为a的类型后再加
而你这里g+=h
就是 g = g + (Object)h;
而不是 (Object)(g + h);
两Object相加是要出问题的
String h="lll";
g=(Object)(g+h);
没出错是因为 + 调用了 Object 的 toString() 方法
两个object +会出问题