黑马程序员技术交流社区
标题:
有关内存分配问题,求解!!
[打印本页]
作者:
孔斌
时间:
2013-1-28 10:22
标题:
有关内存分配问题,求解!!
public class Test1 {
/**
* 有关内存分配的问题
*/
public static void main(String args[]){
float f =4.2F;
Float g = new Float(4.2F);
Double d = new Double(4.2);
System.out.println(f==g);//true 这个是为什么
System.out.println( (g.equals(4.2)));
System.out.println(g.equals(f));
System.out.println(d.equals(f));
}
}
复制代码
我们知道 对象的初始化是分配到推内存,而简单数据类型是在栈内分配,为什么会相等呢?
作者:
郭俊
时间:
2013-1-28 10:33
equals() 用于引用数据类型(除了基本数据类型8个,都是引用数据类型,包括封装类,Object子类等), 比较是否指向相同的对象,
作者:
王少雷
时间:
2013-1-28 10:33
float f =4.2F;
基本类型,指向了4.2F常量池中的堆内存地址
Float g = new Float(4.2F);
原始类型,为4.2F常量在内存创建了一个原始类型Float,JVM在规定范围,自动拆装功能。能把它们指向同一空间。
作者:
廖成
时间:
2013-1-28 11:37
实际上自动装箱就是系统自动帮我们去 new 了 Integer 对象。每个对象都会有一个 hashCode() 方法,
这个方法是继承 Object 而来,Object 类是所有类的超类。当需要比较两个对象是否相等时,可以用 " == " 和 equals 来做比较。
于对象而言, " == " 比较的是哈希码的值,也就是比较 hashCode() 方法的返回值,这个值是唯一的,在底层它是用来确定对象在堆内存上的存储位置。
" == " 也可以用来做基本数据类型的比较。而equals 方法是用来比较两个对象的内容是否一样。
作者:
黄锦成
时间:
2013-1-28 12:47
这个题我一开始看也不明白。后来想了一下,明白了。
8种基本类型在JDK5之后有了自动装箱特性。
float f =4.2F; --->基本类型
Float g = new Float(4.2F); --->引用类型
System.out.println(f==g);//true 这个是为什么
这里是比较内存地址。由于f是基本类型,会自动装箱成引用类型。在自动装箱时,它会去查找有没有 一个包装了数据为4.2F的Float对象。如果有就是用它,没有就创建一个。所以f自动装箱所引用的对象和g所所引用的对象是同一个,==比较就为true了
作者:
邝雄伟
时间:
2013-1-29 01:26
Float g = new Float(4.2F); 从JDK1.5之后有自动拆箱功能,把g 自动转为了基本数据类型,当两个都是基本数据类型时而且数值一样,结果就为true
作者:
杨杨
时间:
2013-1-30 11:14
自动拆箱
作者:
杨杨
时间:
2013-1-30 11:15
你跟string有点混吧 string类不是基本类型
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2