java对象内存的有关问题
java对象内存的问题
输出结果:
我想问一下,我知道AA类的a对象创建了10个对象,对象地址都不一样。
但是为什么SimpleDateFormat sdf的对象地址都是一样的。是否只创建了1个对象呢??
------解决思路----------------------
SimpleDateFoemat中hashCode的源码:
其中pattern就是你这里的"yyyy-MM-dd HH:mm:ss",而且这个类没有重写toString()方法。所以只要采用同一个pattern,输出结果就是一样的。
------解决思路----------------------
都是多个对象,不同的是aa 是只有一个变量,每次指向不同的内存地址引用
sdf 是每次新建的局部变量,指向自己new 返回的内存地址引用
aa 变量只有一个,sdf 变量有多个
import java.text.*;
import java.util.*;
class A {
private int a;
public A(int a) {
this.a = a;
}
public int getA(){
return this.a;
}
};
public class Test03 {
public static void main(String args[]) {
A aa = null;
for (int i = 1; i <= 10; i++) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
aa = new A(i);
System.out.println("aa的内存地址:"+aa);
System.out.println("sdf的内存地址:"+sdf);
}
System.gc();
}
}
输出结果:
aa的内存地址:A@a62fc3
sdf的内存地址:java.text.SimpleDateFormat@4f76f1a0
aa的内存地址:A@89ae9e
sdf的内存地址:java.text.SimpleDateFormat@4f76f1a0
aa的内存地址:A@1270b73
sdf的内存地址:java.text.SimpleDateFormat@4f76f1a0
以下省略
我想问一下,我知道AA类的a对象创建了10个对象,对象地址都不一样。
但是为什么SimpleDateFormat sdf的对象地址都是一样的。是否只创建了1个对象呢??
------解决思路----------------------
SimpleDateFoemat中hashCode的源码:
public int hashCode()
{
return pattern.hashCode();
// just enough fields for a reasonable distribution
}
其中pattern就是你这里的"yyyy-MM-dd HH:mm:ss",而且这个类没有重写toString()方法。所以只要采用同一个pattern,输出结果就是一样的。
------解决思路----------------------
都是多个对象,不同的是aa 是只有一个变量,每次指向不同的内存地址引用
sdf 是每次新建的局部变量,指向自己new 返回的内存地址引用
aa 变量只有一个,sdf 变量有多个