没错
Object[] a = new String[]{"12","34","56"};
String[] b = (String[]) a;
Run Code Online (Sandbox Code Playgroud)没错
Object a = new String[]{"12","34","56"};
String[] b = (String[]) a;
Run Code Online (Sandbox Code Playgroud)运行时错误:ClassCastException
Object[] a = new Object[3];
a[0] = "12";
a[1] = "34";
a[2] = "56";
String[] b = (String[]) a;
Run Code Online (Sandbox Code Playgroud)运行时错误:ClassCastException
Object[] a = {"12","34","56"};
String[] b = (String[]) a;
Run Code Online (Sandbox Code Playgroud)当然,如果将Object[]变量String[]创建为一个变量,我们可以将变量转发回String[].
我的问题是,为什么我们不能投Object[]来String[],当它被作为创建的Object[],但它的所有成员都是字符串?是因为安全原因还是没有那么有用呢?
请参阅以下示例:
interface I {}
class A implements I {}
class B implements I {}
class Foo{
void f(A a) {}
void f(B b) {}
static public void main(String[]args ) {
I[] elements = new I[] {new A(), new B(), new B(), new A()};
Foo o = new Foo();
for (I element:elements)
o.f(element);//won't compile
}
}
Run Code Online (Sandbox Code Playgroud)
为什么重载方法不支持向上转换?
如果在运行时实现了重载,它将提供更大的灵活性.例如,访客模式会更简单.是否存在阻止Java执行此操作的任何技术原因?
class A {
String s4 = "abc";
static public void main(String[]args ) {
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
A o = new A();
String s5 = new String("def");
System.out.println("s1==s2 : " + (s1==s2));
System.out.println("s1==s1.intern : " + (s1==s1.intern()));
System.out.println("s1==s3 : " + (s1==s3));
System.out.println("s1.intern==s3.intern : " + (s1.intern()==s3.intern()));
System.out.println("s1==s4 : " + (s1==o.s4));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
s1==s2 : true
s1==s1.intern : true
s1==s3 : false
s1.intern==s3.intern : true
s1==s4 : true
Run Code Online (Sandbox Code Playgroud)
我的问题: …
见下面的例子:
class A {
A() { this(1); }
A(int i) { System.out.println("A" ); }
}
class B extends A {
B() {}
B(int i) { System.out.println("B" ); }
}
public class Test
{
public static void main(String[] args) {
A o = new B();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
A
Run Code Online (Sandbox Code Playgroud)
Q1:似乎java没有对"this(1)"执行后期绑定.它已在编译时决定.请确认.
Q2:Java不对任何构造函数执行后期绑定.请确认.
问题3:这是否意味着构造函数是隐式最终的?
见下面的例子,有哪些比较有限制类型参数的利益f(U u)来g(I obj)?
interface I {}
class A {
public static <U extends I> void f(U u){ }
public static void g(I obj) { }
}
Run Code Online (Sandbox Code Playgroud) 我正在使用jqGrid PHP.添加新行(内联模式)时,如何使用与上一个选定行相同的单元格数据预填充新行?非常感谢.
java ×6
arrays ×1
casting ×1
constructor ×1
final ×1
generics ×1
jqgrid ×1
object ×1
overloading ×1
overriding ×1
php ×1
reference ×1
string ×1
this ×1