首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么"Object[] object =新String[][]“会编译?

为什么"Object[] object =新String[][]“会编译?
EN

Stack Overflow用户
提问于 2014-01-02 16:45:24
回答 5查看 2.5K关注 0票数 9

为什么这段代码要编译?

代码语言:javascript
运行
AI代码解释
复制
Object[] object = new String[5][5];

我的意思是,如果我创建的数组对象的维度与引用变量中指定的不同,我为什么要这样做呢?

这不能编译:

代码语言:javascript
运行
AI代码解释
复制
String[] strings = new String[5][5];

这是怎么回事?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-01-02 16:55:24

第一个编译是因为String[]是一个Object。第二个没有编译,因为String不是String[]

代码语言:javascript
运行
AI代码解释
复制
Object[] object = new String[5][5];  // Means each element is an String[] which is an Object as well.

String[] strings = new String[5][5]; // Also Means each element is an String[] which is not same as just String.
票数 4
EN

Stack Overflow用户

发布于 2014-01-02 16:51:42

Java中的数组是协变。对于任何类型的T1T2,如果T2派生自T1 (即T2直接或间接扩展或实现T1),那么T2[]T1[]的一个子类型。因此,String[]Object[]的子类型,您可以将String[]类型的对象分配给Object[]类型的变量。

注意(正如Oli Charlesworth在注释中指出的那样),协方差破坏了Java编译时类型的安全性。此代码:

代码语言:javascript
运行
AI代码解释
复制
Object [] o = new String[5];
o[0] = Integer.valueOf(3);

将在第二行尝试执行时在运行时生成ArrayStoreException。所以我并不是说协变数组是一件很棒的事情,只是语言就是这样工作的。

关于第二个例子,String[]不是String[][]。协方差不适用,因为String[]不是从String派生的。然而,你可以这样做:

代码语言:javascript
运行
AI代码解释
复制
Object[] o = new String[5][5];

因为String[]实际上是Object

票数 4
EN

Stack Overflow用户

发布于 2014-01-02 16:48:58

任何数组本身都是一个Object

因此,根据这一规则:

String[5]Object

String[5][]Object[]

String[5][]String[5]也是Object的。

当您希望强制编译器处理数组或多数组,而不是简单的Object时,区别很重要。

对于Object以外的所有类型,此规则不适用,然后:

String[5][5] 不是a String[]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20894605

复制
相关文章
java中string转object_java中Object转String
在java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能。本文将对常用的转换方法进行一个总结。常用的方法有Object.toString(),(String)要转换的对象,String.valueOf(Object)等。下面对这些方法一一进行分析。
全栈程序员站长
2022/07/01
3.5K0
java string 转 object_java 类型转换 Object和String互转
但是,使用toString()的对象不能为null,否则会抛出异常java.lang.NullPointerException
全栈程序员站长
2022/09/05
2.5K0
Java-类型转换,String转Object和Object转String「建议收藏」
String 转换 Object : 使用类似 Obj.parseObj(String) , Obj.valueOf(String)
全栈程序员站长
2022/06/30
6K0
Java-类型转换,String转Object和Object转String「建议收藏」
Object数组转String数组
//src:源数组;srcPos:源数组要复制的起始位置;dest:目的数组;destPos:目的数组放置的起始位置;length:复制的长度. public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
全栈程序员站长
2022/08/22
2.4K0
关于String.format(String format, Object... args)
通过查看源码可以看到这个方法是从 JDK 1.5 开始引入的,底层是调用了 java.util.Formatter 类的 format 方法。
Li_XiaoJin
2022/06/10
8390
怎么使用Java 8 Stream将List(Object)转成List(Map(String, Object))?
问题描述:有一个用户列表List<User>,须将每个User部分字段提取出来,重新放入一个Map中,然后将生成的Map放入List中。
全栈程序员站长
2022/10/02
4.4K0
typeof运算对于null会返回“Object"
您也许会问,为什么 typeof 运算符对于 null 值会返回 "Object"。这实际上是 JavaScript 最初实现中的一个错误,然后被 ECMAScript 沿用了。现在,null 被认为是对象的占位符,从而解释了这一矛盾,但从技术上来说,它仍然是原始值。
阮键
2019/08/07
2.3K0
java object toarray,Object[] toArray()
java.util.LinkedList.toArray()方法以适当的顺序(从第一个元素到最后一个元素)返回包含此列表中所有元素的数组。此方法充当基于数组的API和基于集合的API之间的桥梁。
全栈程序员站长
2022/08/28
6650
HtmlDocument.InvokeScript 方法 (String, Object[])「建议收藏」
HtmlDocument.InvokeScript 方法 (String, Object[])
全栈程序员站长
2022/09/09
6970
public static Object service(String url, World至浏览
g++ main.cpp -o helloworld -lfcgi 输出文件可以随便命名,本文命名为helloworld。
w4979的博客
2020/06/01
3830
object.finalize_object的equals方法
finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。
全栈程序员站长
2022/10/02
6860
object.finalize_object的equals方法
public static Object service(String url, World至浏览
public static void main(String[] args) throws Exception{
w4979的博客
2020/05/29
2630
一起学JAVA API Object String StringBuffer/StringBuilder
大家好,又见面了,我是你们的朋友全栈君。 1 前言 亲爱的小伙伴萌,目前我们看到的是Java基础部分的一个新的部分API,这是个啥,又能做啥呢? 其实可以概括成一句话:帮助我们站在巨人的肩膀上
全栈程序员站长
2022/09/01
2290
一起学JAVA API Object String StringBuffer/StringBuilder
java中将Object类型转换成String类型[通俗易懂]
从下图(a图)的String类的valueOf(Object)的源码可以看到,当传入的值为null的时候返回的是“null”字符串,而不是null,所以在这里如果想判断这个string的值不为空的时候,应该用字段串相关判断不为空的方法例如用equals方法。示例如下(b图)
全栈程序员站长
2022/08/30
1.3K0
java中将Object类型转换成String类型[通俗易懂]
JS 对象(Object)和字符串(String)互转[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/140704.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/01
2.1K0
Object对象
Object对象是JavaScript中两个顶层对象之一,提供方法供直接调用以及原型链继承调用。
WindRunnerMax
2020/08/27
2.4K0
getStorage:fail parameter error: parameter should be Object instead of String;
从上图可以看出是使用getStorage导致的,因为我是把vue缓存方法localStorage['carts']直接改为:wx.getStorage('carts'),忘记了小程序原生缓存方式了。
honey缘木鱼
2019/03/15
9.4K0
getStorage:fail parameter error: parameter should be Object instead of String;
public static Object service(String url, World至浏览
生产环境,已经运行了好几年,一直没有问题。最近频繁奔溃(一般是连续运行好几天才奔溃一次)。boost 返回的 奔溃显示是 invaild_charset gbk. 通过在glibc中打断点,发现调用iconv_open的时候,返回错误码 __GCONV_NOCONV
w4979的博客
2020/07/04
3430
【后端】Object转String的4种方法
先将 Object 类型转换为 string,再将 string 转换为 long/int
全栈程序员站长
2022/11/16
2.2K0
点击加载更多

相似问题

java : Object<String> obj =新的Object<~>();

13

为什么新列表= List<Object> ArrayList<String>()会产生TypeMismatch错误

51

Dictionary<string,object> to object

49

C#新Dictionary<string,object>()是IDictionary<object,object>返回false

20

为什么不能设置<Object> =新的TreeSet <String>

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档