Arrays in Java are covariant. For any types T1 and T2, if T2 derives from T1 (that is, T2 directly or indirectly extends or implements T1), then T2[] is a subtype of T1[]. Thus, String[] is a subtype of Object[] and you can assign an object of type String[] to a variable of type Object[].
Note (as Oli Charlesworth points out in the comment), covariance breaks Java's compile-time type safety. This code:
Object [] o = new String[5];
o[0] = Integer.valueOf(3);
will generate an ArrayStoreException at run time when the second line tries to execute. So I'm not suggesting that covariant arrays are a great thing; it's just that's how the language works.
Regarding your second example, a String[] is not a String[][]. Covariance does not apply because String[] does not derive from String. However, you could do:
Object[] o = new String[5][5];
because a String[] is, in fact, an Object.
Objectin Java.