当我调用toString函数调用中收到的对象时,我得到了这个.我知道对象的类型是在这个字符串中编码的,但我不知道如何阅读它.
这种类型的编码叫什么?
我正在尝试一个工具jhat来测试我的java内存使用情况.它读入堆转储文件并将信息打印为html.但是,表格显示如下:
Class Instance Count Total Size
class [B 36585 49323821
class [Lcom.sun.mail.imap.IMAPMessage; 790 16254336
class [C 124512 12832896
class [I 23080 11923504
class [Ljava.lang.Object; 13614 6664528
class java.lang.String 108982 2179640
class java.lang.Integer 219502 878008
Run Code Online (Sandbox Code Playgroud)
什么是[B [C等级?
这是输出:
上午11:57:04 Gradle'KeddreaderProject'项目刷新失败:原因:org.gradle.internal.service.ServiceLocator.([Ljava/lang/ClassLoader;)V:
我试图删除.gradle文件夹,但它没有帮助.可能是什么问题?
编辑:即使我尝试在Ubuntu 13.10上导入任何其他项目,我也会收到此错误.但是在Windows上一切正常(使用相同版本的Android Studio).
为什么L选择类型签名中引用的前缀?是否L代表某种东西,如B代表byte,I代表int什么?或者它被选中是因为C已经分配给了char?
例如,
System.out.println( new String[0].getClass().getName() );
Run Code Online (Sandbox Code Playgroud)
产量:
[Ljava.lang.String;
Run Code Online (Sandbox Code Playgroud)
我已经知道Java规范和Class.getName方法 javadoc 中的解释.
我看到这段代码有些令人困惑的行为.
def fileArrayMeta = newFile.readLines()
def file3 = fileArrayMeta.collect{ line -> line.split("\\s+") }
println file3[0]
println file3[0].getClass()
Run Code Online (Sandbox Code Playgroud)
这个操作的预期结果应该是.
=> [, NOTE, *ENTRY, STATEMENT, *.]
=> class java.util.ArrayList
Run Code Online (Sandbox Code Playgroud)
这个操作的实际结果是.
=> [, NOTE, *ENTRY, STATEMENT, *.]
=> class [Ljava.lang.String;
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
println file3[0].removeAll("", null)
Run Code Online (Sandbox Code Playgroud)
线程"main"中的异常groovy.lang.MissingMethodException:没有方法签名:[Ljava.lang.String; .removeAll()适用于参数类型:(java.lang.String,null)values:[,null]
我认为这也应该有效,为什么不呢?
def clean4 = clean3.each{it.collect{ it != "" && it != null }}
println clean4[0]
Run Code Online (Sandbox Code Playgroud)