[Ljava.lang.String;@6d6f6e28 是什么意思
文章目录
- 一、问题
- 二、初探
- 三、深入
一、问题
打印 String[]
String[] strs = new String[]{"a", "b", "c"};
System.out.println(strs);
输出
[Ljava.lang.String;@6d6f6e28
java.lang.String;、@6d6f6e28 我都能理解,[L
是什么意思呢?
二、初探
看一下 System.out.println(strs)
的过程:
// PrintStream.java
public void println(Object x) {String s = String.valueOf(x);synchronized (this) {print(s);newLine();}
}// String.java
public static String valueOf(Object obj) {return (obj == null) ? "null" : obj.toString();
}
可以看出,[Ljava.lang.String;@6d6f6e28
就是 strs.toString() 返回的值。
strs 的类型是 String[],是一个数组类型,数组类型没有重写 toString 方法,所以看下 Object 的 toString 方法:
public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
@
之后是 hashCode 的值,所以 [Ljava.lang.String;
就是 getClass().getName() 返回的值。即 strs.getClass().getName() == "[Ljava.lang.String;"
。
三、深入
再看下 Class 的 getName() 方法:
public String getName() {String name = this.name;if (name == null)this.name = name = getNameNative();return name;
}
最终实现交给了 getNameNative() 方法,这是一个 native 方法,看不到源码,但 getName() 方法前的文档注释已经很清楚了。(太长,下面会有文档链接)
在看 getName() 方法的文档前,还要先看一下 class 文件中的 java 类型表示:
在 class 文件中,会通过类型描述符(即字段描述符)来代表 java 中的数据类型。
对于非数组类型:
类型 | 类型描述符 |
---|---|
boolean | Z |
byte | B |
char | C |
double | D |
float | F |
int | I |
long | J |
short | S |
class or interface | Lclassname; |
引用类型 class 的 classname,指的是它的 class 文件二进制名(即全限定名,更多见二进制名与全限定名),如 java/lang/Thread
。
对于数组类型:
类型 | 类型描述符 |
---|---|
boolean[] | [Z |
boolean[][] | [[Z |
byte[] | [B |
byte[][] | [[B |
char[] | [C |
char[][] | [[C |
… | … |
class or interface[] | [Lclassname; |
class or interface[][] | [[Lclassname; |
即 [ + 自己元素类型的类型描述符
,[
的个数取决于数组的维度。
现在再来看 getName() 方法的文档,翻译总结如下:
- 对于原始数据类型,返回其 java 关键字
- 对于非数组引用类型,返回其 Java 标准二进制名
- 对于数组引用类型,返回它类型描述符,并将其中的
\
改为.
再回到最初的 strs.getClass().getName()
,strs 是一个数组类型,返回它的类型描述符,即 [ + 自己元素类型的类型描述符
,它的元素类型是 String,String 类型的描述符是 Ljava/lang/String;
,将其中的 /
改为 .
,得到 Ljava.lang.String;
。所以strs.getClass().getName() == "[Ljava.lang.String;"
。
参考链接:
https://stackoverflow.com/questions/5085889/l-array-notation-where-does-it-come-from
[Ljava.lang.String;@6d6f6e28 是什么意思相关推荐
- 在拦截器中获取请求参数,[Ljava.lang.String; cannot be cast to java.lang.String报错
Map<String,Object> parametersmap=invocation.getInvocationContext().getParameters();//获取请求参数 ...
- [Ljava.lang.String和java.lang.String区别
[Ljava.lang.String和java.lang.String区别 注:[Ljava.lang.String@1b634e7 -- "[" 表示一维数组 ...
- 文件上传错误:Error setting expression 'uploadImage' with value '[Ljava.lang.String;@5ff8a691'...
警告: Error setting expression 'uploadImage' with value '[Ljava.lang.String;@5ff8a691' ognl.MethodFail ...
- JNI字段描述符[Ljava/lang/String
http://blog.csdn.net/jintiaozhuang/article/details/9016889 JNI字段描述符"([Ljava/lang/String;)V" ...
- java写spark碰到输出为[Ljava.lang.String;@889a8a8的情况
原始代码如下: import com.sun.rowset.internal.Row; import org.apache.spark.api.java.JavaPairRDD; import org ...
- cxf javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)
文章目录 1. 现象 2. 解决方案1 3. 解决方案2 1. 现象 CXF 在和xercesImpl.jar冲突的时候,抱错javax.xml.parsers.DocumentBuilderFact ...
- 【registry】registry AbstractMethodError javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws
1.概述 在 [registries]registrie rest-service idea 无法引入的背景下,以及 [registry]NoSuchFieldError: INCLUDE_ALL 以 ...
- Spark读取Hbase报错NoSuchMethodError: org.apache.hadoop.conf.Configuration.getPassword(Ljava/lang/String;
NoSuchMethodError一般报错都是包冲突导致的. java.lang.NoSuchMethodError: org.apache.hadoop.conf.Configuration.get ...
- cn.cw.gps.domain.VisitReport.setVisitID([Ljava.lang.String;)]
今天编程时遇到一个问题,后台总是报cn.cw.gps.domain.VisitReport.setVisitID([Ljava.lang.String;)]错误,经过故障排查,发现是在jsp页面的 & ...
最新文章
- Discrete Fourier Transform离散傅里叶变换算法
- 小熊派4G cat1模块体验测试报告,AT命令发送短信拨号无脑教程,cat1移动网速测试...
- 操作系统 第二章【进程管理】【MOOC答案】
- Direct3D 11.1新特性曝光
- 【Java 排序】重写Compare方法,实现自己定义排序
- ERP text object hard code
- Hive分析窗口函数(五) GROUPING SETS,GROUPING__ID,CUBE,ROLLUP
- MongoDB的存储结构及对空间使用率的影响
- 求平均值 Avg.java
- 乐玩模块脚本实战教程辅助脚本制作开发视频
- 图文并茂!60页PPT《快速入门python学习路线》学不会你找我
- PackageInstaller 5.0源码分析静默安装与静默卸载
- 今年这形势,程序员被裁员如何申请N+1,本文教科书 式 案例 供参考
- python爬虫qq付费音乐_Python爬虫实战之爬取QQ音乐数据!QQ音乐限制太多了
- 风险模型—CreditMetrics模型1
- 选手投票html,选手投票网页制作
- 《tkinter实用教程二》tkinter的子模块ttk
- 使用Math.max和Math.min求数组的最大值和最小值
- win10 桌面颜色变成灰色
- 深入讲解Android!最全的BAT大厂面试题整理,威力加强版
热门文章
- 软件测试现在想拿到20k的高薪offer,到底是不是痴人说梦?
- 毫米波与视觉融合及车道线检测视频分享
- “最差银幕情侣”出炉 娜塔莉和海登获选最不般配
- Flink Standalone 集群部署
- threejs动画(Animation system)
- 微信小程序之云菜谱的设计
- [山东科技大学OJ]1060 Problem G: 求最大值和最小值
- 贝叶斯算法及实例python实现
- IP地址、子网掩码、默认网关、DNS服务器详解
- Warning: (3719, 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias fo