JVM中的[Ljava.lang.Object; 究竟是什么意思? - 云+社区

腾讯云 · · 1679 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

你是不是经常看到控制台输出如题的日志,而似懂非懂的。

今天我们就来介绍下这些L啦究竟是些什么东东。

比如说我们经常看到这样的日志:

[Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

先来简单的说一下, "["表示数组,后面跟着的是具体的类型。

这里我们再给出一个典型的例子来看看:

(IDLjava/lang/Thread;)Ljava/lang/Object;

这就是表示一个方法,方法有三个参数,类型分别为I,D,L。返回值类型为L。然后L类型要跟具体的类型,然后以"/"替换包名的".",L类型的要以“;”分号结尾。

使用javap查看

上代码,我们新建一个S类,然后通过javap就可以看到具体的类型了:

package com.importsource.datastructure;

class S {
  Object  hello(int i, double d, long j, Thread t ) {
   return new Object();
  }
}

执行命令javac S.java,然后执行javap -v S.class,得到如下输出:

Classfile /Users/hezhuofan/Documents/importsource_dev/concurrency-samples/src/main/java/com/importsource/datastructure/S.class Last modified May 28, 2018; size 305 bytes MD5 checksum bc36118f7847e5598c10ef406f539275 Compiled from "S.java" class com.importsource.datastructure.S minor version: 0 major version: 52 flags: ACC_SUPER Constant pool: #1 = Methodref #2.#12 // java/lang/Object."<init>":()V #2 = Class #13 // java/lang/Object #3 = Class #14 // com/importsource/datastructure/S #4 = Utf8 <init> #5 = Utf8 ()V #6 = Utf8 Code #7 = Utf8 LineNumberTable #8 = Utf8 hello #9 = Utf8 (IDJLjava/lang/Thread;)Ljava/lang/Object; #10 = Utf8 SourceFile #11 = Utf8 S.java #12 = NameAndType #4:#5 // "<init>":()V #13 = Utf8 java/lang/Object #14 = Utf8 com/importsource/datastructure/S { com.importsource.datastructure.S(); descriptor: ()V flags: Code: stack=1, locals=1, args_size=1 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: return LineNumberTable: line 3: 0 java.lang.Object hello(int, double, long, java.lang.Thread); descriptor: (IDJLjava/lang/Thread;)Ljava/lang/Object; flags: Code: stack=2, locals=7, args_size=5 0: new #2 // class java/lang/Object 3: dup 4: invokespecial #1 // Method java/lang/Object."<init>":()V 7: areturn LineNumberTable: line 5: 0 } SourceFile: "S.java"

Field Type对应表

大多是基本类型的首字母大写,其中有几个比较特殊:J 、L和Z。这三个需要特别记忆一下:J表示long;L表示对象;Z表示boolean。

本文来自:腾讯云

感谢作者:腾讯云

查看原文:JVM中的[Ljava.lang.Object; 究竟是什么意思? - 云+社区

1679 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传