Java中打印地址的四种方法及源码
时间: 2024-03-26 14:34:14 浏览: 55
详解Java 打印堆栈的几种方法
Java中打印地址的四种方法:
1. 使用System.out.println方法打印地址:
```java
int a = 10;
System.out.println("a的地址是:" + Integer.toHexString(System.identityHashCode(a)));
```
2. 使用java.util.logging.Logger类打印地址:
```java
int a = 10;
Logger logger = Logger.getLogger("Main");
logger.log(Level.INFO, "a的地址是:" + Integer.toHexString(System.identityHashCode(a)));
```
3. 使用java.lang.management.ManagementFactory类打印地址:
```java
int a = 10;
String address = ManagementFactory.getRuntimeMXBean().getName() + "@" + Integer.toHexString(System.identityHashCode(a));
System.out.println("a的地址是:" + address);
```
4. 使用sun.misc.Unsafe类打印地址:
```java
int a = 10;
Unsafe unsafe = Unsafe.getUnsafe();
long address = unsafe.getLong(a, Unsafe.ARRAY_INT_BASE_OFFSET);
System.out.println("a的地址是:" + Long.toHexString(address));
```
其中,前三种方法都是使用Java的标准库打印地址,最后一种方法是使用Java的非标准库sun.misc.Unsafe类,因此需要注意使用风险。
完整的源码如下:
```java
import java.lang.management.ManagementFactory;
import java.util.logging.Level;
import java.util.logging.Logger;
import sun.misc.Unsafe;
public class Main {
public static void main(String[] args) {
int a = 10;
// 使用System.out.println方法打印地址
System.out.println("a的地址是:" + Integer.toHexString(System.identityHashCode(a)));
// 使用java.util.logging.Logger类打印地址
Logger logger = Logger.getLogger("Main");
logger.log(Level.INFO, "a的地址是:" + Integer.toHexString(System.identityHashCode(a)));
// 使用java.lang.management.ManagementFactory类打印地址
String address = ManagementFactory.getRuntimeMXBean().getName() + "@" + Integer.toHexString(System.identityHashCode(a));
System.out.println("a的地址是:" + address);
// 使用sun.misc.Unsafe类打印地址
Unsafe unsafe = Unsafe.getUnsafe();
long addressUnsafe = unsafe.getLong(a, Unsafe.ARRAY_INT_BASE_OFFSET);
System.out.println("a的地址是:" + Long.toHexString(addressUnsafe));
}
}
```
阅读全文