java强转与继承关系的加深理解:object[]的数组无法强转为String[]的数组

SpringBoot统一返回处理出现cannot be cast to java.lang.String异常 后端服务使用Restful API的形式,前后端得规范一般是json格式,如果返回的是字符串直接手动封装返回对象转成json字符串返回即可。当返回的数据是字符串时,此处得方法是要去循环遍历。异常,返回其他类型就无任何问题。当返回的数据是非字符串时使用的。会先被遍历到,这时会认为。默认会注册一些自带的。 阅读详情

在运行下面这段代码时报了一个无法强转的错误Ljava.lang.Object; cannot be cast to [Ljava.lang.String;。

public class Demo {
    public static void main(String[] args) {

        ArrayList<String> stringArrayList = new ArrayList<String>();
        stringArrayList.add("abc");
        stringArrayList.add("efg");
        stringArrayList.add("hij");
        
        String[] s = (String[]) stringArrayList.toArray();
    }
}

一开始考虑的是,明明stringArrayList.toArray()作为一个数组其中的元素都来自String类型的字符串,但为什么不能强转。其实不能强转的原因在于stringArrayList.toArray()中的元素虽然来自”String“类型,但是该数组却是一个Object[]类型,自然也无法强转为String[]类型。换句话说一个Object[]类型的对象无法强转为String[]类型的对象。另外这里如果要强转只能将数组中的元素单独拿出来,对单个元素进行强转。为了更清楚的说明我们运行下面这段代码:

public class Demo {
    public static void main(String[] args) {
        String[] s1 = {"abc", "efg", "hij"};
        Object[] s2 = s1;
        String[] s3 = (String[]) s2;  // 可以强转

        Object[] s4 = {"abc", "efg", "hij"};
        String[] s5 = (String[]) s4;  // 报错,不可以强转
    }
}

考虑上述代码中为什么s2虽然是Object[]类型但能够强转为’String[]'类型的s3。原因在于变量s2虽然是Object[]类型,但是其指向了一个String[]类型的对象,‘String[]’类型与’Object[]'类型是存在继承关系的。而下面的s4之所以不能强转为s5是因为s4变量所指对象类型为Object[]与s5类型不存在继承关系。

总结

多态是面向对象的三大特性之一,它涉及父类/接口的变量引用子类/实现类的对象。一个类型能否向上转型(强转)关键是看该变量所指向对象与目标类型是否存在继承关系,如果存在则可以强转。

这里有个容易忽视的点是一个变量的类型不一定就是其所引用对象的真正的类型,因为多态的原因还可能是其亚类型/或是接口类型。

java基础之object、string java基础面试题 阅读详情

相关推荐

通达信浮筹多空波段抓牛擒龙指标公式源码

VAR33:=VA3>=REF(VA4,1) AND C<REF(C,1) AND VAR19=60 AND VAR18=0 AND 活跃线>=REF(活跃线,1) AND VA12<REF(VA13,1);DRAWTEXT(VAR28 AND COUNT(VAR28,30)=1,65,' ★超涨注意风险'),COLOR0000FF;DRAWTEXT(VAR26 AND COUNT(VAR26,30)=1,90,' ←继续等'),COLOR00FFFF;浮筹线:VA3,COLORFF00FF;

2401_86043146的博客 5267

为什么Object数组无法被强制转换

为什么Object数组无法被强制转换ArrayList中的错误案例原因 今天在进行数组的强制类型转换的时候爆了个异常Exception in thread “main” java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String; 直接上代码。 ArrayList中的错误案例 List...

zzzzzzyn的博客 2995

【ROS学习笔记】13.ROS中的坐标管理系统

文章目录1 机器人中的坐标变换2 TF功能包TF坐标变换如何实现?TF的一个小案例3 小程序:小海龟跟随实验打开小程序查看当前的TF树坐标相对位置关系可视化1(tf_echo)坐标相对位置关系可视化2(rviz) 本节学习ROS中的坐标管理系统。 (部分图摘自:b站【古月居】古月·ROS入门21讲) 1 机器人中的坐标变换 机器人运动学的核心,描述任意两个坐标系之中任意两个向量之间的变换,可以用一个4×4的变换矩阵(Transformation Matrices)来描述它的平移和旋转变化。 变换矩阵中有包括

takedachia的博客 4338

java中是不能对数组进行强制转换的

错误示例:   public static void main(String[] args) {         List expertIdlist = new ArrayList();         Object[] array = expertIdlist.toArray();         System.out.println((

cmxiaoerlang的博客 656

用Multisim仿真AD630锁定放大器:从2012年电赛A题实战到避坑指南

本文详细介绍了如何使用Multisim仿真AD630锁定放大器,从2012年电赛A题实战出发,提供完整的电路搭建、参数优化及避坑指南。重点解析AD630的开关调制架构和双相位检测的工程实现,帮助读者在强噪声背景下有效提取微弱信号,提升电子设计竞赛和工程实践中的信号处理能力。

weixin_42549451的博客 203

无人机避障——感知篇(采用Mid360复现Fast-lio)

本文介绍了在Ubuntu 18.04和ROS Melodic环境下,使用Xavier-nx电脑和Livox Mid-360激光雷达编译和运行FAST-LIO工程的步骤,包括创建工作空间、编译驱动和FAST-LIO源码,以及运行launch文件进行建图的过程。

weixin_45390670的博客 3546

java子类强转父类失败 类方法不能被重写

在java中,子类是不能直接转成父类的。如果直接强转就会出现ClassCastException。 public class ChongXie extends A{ public static void hello(){ System.out.println("chongxie"); } public static void main(String[] args) { A a=new A(); ChongXie b=null;

weixin_43975276的博客 2686

Win11 系统下 VisualStudio2022 配置点云库 PCL1.11.1

安装完成之后打开文件夹E:\PCL 1.11.1\3rdParty\OpenNI2双击 并选择路径 (E:\PCL 1.11.1\3rdParty\OpenNI2) 安装即可全部安装完成之后,将pcl-1.11.1-pdb-msvc2019-win64.zip解压后的 .pdb文件拷贝到(E:\PCL 1.11.1\bin)中设置环境变量:到此,环境变量配置完成。

qq_53545309的博客 1127

java string 转 object_java 类型转换 Object和String互转

Long,Float等Object转为String方法1.toString()使用范围:任何继承Object的类都具有这个方法但是,使用toString()的对象不能为null,否则会抛出异常java.lang.NullPointerException/**返回:该对象的字符串表示*/Integer x = new Integer(100);if(x!=null)System.out.printl...

weixin_29056781的博客 1万+

开源模型应用落地-qwen模型小试-入门篇(二)

在windows环境下,使用transformer设置模型参数/System Prompt/历史对话

以微薄之力,予他人些许温暖. 3237

vscode 配置 codeql

vscode 配置 codeql

SHELLCODE_8BIT的博客 1441

理解Object转String

在java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能。本文将对常用的转换方法进行一个总结。常用的方法有Object.toString(),(String)要转换的对象,String.valueOf(Object)等。下面对这些方法一一进行分析。 方法1:采用 Object.toString()方法 请看下面的例子:       Object object = ge

kissing7的专栏 976

操作系统实验一到实验九合集(哈工大李治军)

操作系统实验一到实验九合集(哈工大李治军) 有详细代码及注释,程序已在本地测试,均能跑通

leoabcd12的博客 5万+

一起学JAVA API Object String StringBuffer/StringBuilder

1 前言 亲爱的小伙伴萌,目前我们看到的是Java基础部分的一个新的部分API,这是个啥,又能做啥呢? 其实可以概括成一句话:帮助我们站在巨人的肩膀上,实现更加高效的开发,那么我们来一探究竟吧~ 2 什么是API API(Application Programming Interface,应用程序接口)是一些预先定义的函数。目的是提供应用程序与开发人员基于某软件可以访问的一些功能集,但又无需访问源码或理解内部工作机制的细节. API是一种通用功能集,有时公司会将API作为其公共开放系统,也就是公司制定自己的

程序媛泡泡的博客 5万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java object string_java中Object转String

Object转为String的几种形式在java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能。本文将对常用的转换方法进行一个总结。常用的方法有Object.toString(),(String)要转换的对象,String.valueOf(Object)等。下面对这些方法一一进行分析。方法1:采用 Object.toString()方法请看下面的例子:Object obje...

weixin_32075603的博客 430

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java中String、char数组和int之间的互相转换

最近刷题的时候经常遇到要将数值的类型在String、char数组和int之间互相转换,共6种形式,特记录汇总如下。 1 String转char数组 String str = "abc"; char nums[] = str.toCharArray(); // 另外提一个直接转成char字符,括号内是下标 char s = str.charAt(0); 2 char数组转String char nums[] = {'a','b','c'}; String str = String.valueOf(nums

Awt_FuDongLai的博客 7894

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

object强转string数组_String、数组和集合的内存占用大小

阅读本文需要5分钟左右简介之前的文章中,我们使用JOL工具简单的分析过String,数组和集合类的内存占用情况,这里再做一次更详细的分析和介绍,希望大家后面再遇到OOM问题的时候不再抱头痛哭,而是可以有章可循,开始吧。数组先看下JOL的代码和输出://byte arraylog.info("{}",ClassLayout.parseInstance("www.flydean.com".g...

weixin_39977488的博客 241

javastring数组转string_深入理解java String

JDK 中的String 类是一个简单而又不平凡的类, 它是java 语言的核心类。我们今天就来讲讲java String这个类的故事。先看java String 类源码:从源码中我们可以看到String 类是被定义为final 的,这就意味着String 类是不可以被继承的,里面的方法也被定义为final 的,因为String 类是java 语言的核心类,所以java语言设计者基于安全和效率考虑...

weixin_34627088的博客 9621

java常用类 Object,String,Math,Date介绍

返回对象的字符串表示。默认实现是类名@哈希码的无符号十六进制表示(例如当使用打印对象,或进行字符串拼接时,会自动调用此方法。最佳实践:强烈建议在自定义类中重写此方法,以返回一个清晰、有意义的描述性字符串。// ... 构造方法和其他代码 ...@Override// 使用// 输出: Person{name='Alice', age=25}任何对字符串的修改操作(如拼接、替换)都会返回一个新的 String 对象,原对象不变。线程安全,可以缓存哈希值,易于共享。类/包核心用途。

y2222_的博客 1566

Java工具类:Object、String

1.Object类是所有类的祖先,任何对象都是它的直接或间接派生类,没有属性,其中包含的equals()和toString()函数多数被Java类库中的其他类默认重写。2.String类属于不可继承类,字符串内容存放在字符数组中且只能被初始化一次不能改变。3.String类属于引用类型(类类型和数组类型都算引用类型),接收字符串类型的变量存放的是内存地址,所以里面默认重写了equals()函数用于判断字符串内容是否相等。https。...

qq_52130567的博客 836

Java面试基础之String、Integer、Object

Object、String、Integer

dahuabao的博客 2398

JAVA(Object和String)一 Object类和String字符串的理解和使用

JAVA(Object和String)一 Object类和String字符串的理解和使用Object类String类 Object类 理解: 在JAVA中有一个非常特殊的类叫做Object类 JAVA里面所有的类都继承自Object类 我们自身编写的类 都会间接或者隐式的继承自Object类 Object类常用的方法 Object类 一共有13中方法 我们常用的方法有 2.1 toStrin...

西山二十六夜月的博客 1907

Java 把set转为String

我整理的一些关于【Java】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/f2PFnNJava 中将 Set 转为 String 的方法 在 Java 编程中,我们经常需要处理集合数据结构,而 Set 是一种不允许重复元素的集合。很多情况下,我们可能需要将 Set 转换为一...

weixin_37054406的博客 1155

String和object

一、String是不可变对象 java.lang.String类使用了final修饰,不能被继承。Java程序中的所有字面值,即双引号括起的字符串,如"abc",都是作为String类的实例实现的。String是常量,其对象一旦构造就不能再被改变。换句话说,String对象是不可变的,每一个看起来会修改String值的方法,实际上都是创造了一个全新的String对象,以包含修改后的字符串内容。而最...

qq_44962359的博客 2064

对Java中将Object转成String的思考

1.问题 在开发中,有很多时候需要将Object类型转成String。如调用一个方法,其返回的类型是Map<String, Object>类型,当对返回结果进行解析时,很可能需要将Object类型的value转成String类型,那么怎么转换是比较好的方式呢? 2.实现方式及分析 常用的方式应该有如下三种: public class ToStringTest { @Suppress...

一亩三分地 1166
上一篇: java反射机制获取对象中父类属性对象
下一篇: Java IO编程中的几个概念
lbzz
博客等级 码龄7年 6粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值