在 Java 中使用“.printf(...)”打印内存中的值
Using ".printf(...)" in Java to print the value in memory
首先:是的,我知道有类似的问题,但主要是用其他语言或做其他操作
我想打印出内存中变量的值。如,确切的值,而不是变量名。
对于整数值,我想打印出二进制表示的任何内容。这可以通过转换轻松完成,但我想使用内存中的值作为示例。
对于浮点值,我想再次打印出内存中存储的内容,再次作为示例(用于研究论文演示)。
对于非原始值,我想打印出位于变量分配的地址 space。
我该怎么做?它不一定必须使用 "printf" 方法;我记得有人向我提到可以使用 "printf".
有人提出在Java中您无法访问内存中的地址。是否可以访问内存中的原始值本身的值?或者,我最好尝试切换到另一种语言吗?
Java 不会 让您直接访问存储在内存中的任何内容。 JVM 可以自由地以任何形式存储任何值,只要它的行为与 Java Language Specification 中描述的一样。所以你的要求是不可能的。
您可以获得一些 "internal" 值,但它可能不是内存中的值。
For an integer value, I would like to print out the binary representation of whatever is located in binary.
使用Long.toBinaryString(long)
or Integer.toBinaryString(int)
.
For a floating-point value, I again would like to print out exactly what is stored in memory.
使用Double.doubleToRawLongBits(double)
or Float.floatToRawIntBits(float)
,然后如上转换为二进制。
对于 boolean
,该值为 true
或 false
。没有定义内部表示,例如a boolean[10]
可以存储为 10 个 64 位值 0 或 1(不太可能)、10 个字节(可能)或使用低 10 位的 2 个字节。 JVM的选择。
For a non-primitive value, I would like to print out the address located in the variable's allocated space.
不可能。如今,Java 引用通常在内部存储为 32 位 Compressed OOP,但您无法获取它。
首先:是的,我知道有类似的问题,但主要是用其他语言或做其他操作
我想打印出内存中变量的值。如,确切的值,而不是变量名。
对于整数值,我想打印出二进制表示的任何内容。这可以通过转换轻松完成,但我想使用内存中的值作为示例。
对于浮点值,我想再次打印出内存中存储的内容,再次作为示例(用于研究论文演示)。
对于非原始值,我想打印出位于变量分配的地址 space。
我该怎么做?它不一定必须使用 "printf" 方法;我记得有人向我提到可以使用 "printf".
有人提出在Java中您无法访问内存中的地址。是否可以访问内存中的原始值本身的值?或者,我最好尝试切换到另一种语言吗?
Java 不会 让您直接访问存储在内存中的任何内容。 JVM 可以自由地以任何形式存储任何值,只要它的行为与 Java Language Specification 中描述的一样。所以你的要求是不可能的。
您可以获得一些 "internal" 值,但它可能不是内存中的值。
For an integer value, I would like to print out the binary representation of whatever is located in binary.
使用Long.toBinaryString(long)
or Integer.toBinaryString(int)
.
For a floating-point value, I again would like to print out exactly what is stored in memory.
使用Double.doubleToRawLongBits(double)
or Float.floatToRawIntBits(float)
,然后如上转换为二进制。
对于 boolean
,该值为 true
或 false
。没有定义内部表示,例如a boolean[10]
可以存储为 10 个 64 位值 0 或 1(不太可能)、10 个字节(可能)或使用低 10 位的 2 个字节。 JVM的选择。
For a non-primitive value, I would like to print out the address located in the variable's allocated space.
不可能。如今,Java 引用通常在内部存储为 32 位 Compressed OOP,但您无法获取它。