如int与Integer有何区别
int i=1;
Integer i=new Integer(1);
有什么区别?
谢谢...
int i=1;
Integer i=new Integer(1);
有什么区别?
谢谢...
解决方案 »
- java求助。。。大侠帮忙找找错误
- 更改Mysql数据库文件的保存后,如何更改源代码
- 调用的问题(具体请进来看看,标题不好描述)
- 问一个查询问题,困扰我很久了。大哥大姐帮帮忙。
- 高分求助在线等:java的application程序可以获得本机的机器名么?
- 帮忙看一段代码
- 为方便程序员编程,推出“java常用代码一(粘贴即用)"系列,不断更新高质量常用代码段
- 想在java中运行.bat文件,可是没有执行
- 高分求解,不够的可以再加,关于properties文件的存放路径问题?
- 【JBuilder6【不管什么版本,最好有企业版】有地方下载吗?或有D版吗?】
- java 中进程与线程咨询,以及JAVA线程占用CPU 高的问题
- 多语言软件,字符串资源如何管理
int b = 3; 编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找有没有字面值为3的地址,没找到,就开辟一个存放3这个字面值的地址,然后将a指向3的地址。接着处理int b = 3;在创建完b的引用变量后,由于在栈中已经有3这个字面值,便将b直接指向3的地址。这样,就出现了a与b同时均指向3的情况。 特别注意的是,这种字面值的引用与类对象的引用不同。假定两个类对象的引用同时指向一个对象,如果一个对象引用变量修改了这个对象的内部状态,那么另一个对象引用变量也即刻反映出这个变化。相反,通过字面值的引用来修改其值,不会导致另一个指向此字面值的引用的值也跟着改变的情况。如上例,我们定义完a与b的值后,再令a=4;那么,b不会等于4,还是等于3。在编译器内部,遇到a=4;时,它就会重新搜索栈中是否有4的字面值,如果没有,重新开辟地址存放4的值;如果已经有了,则直接将a指向这个地址。因此a值的改变不会影响到b的值。 另一种是包装类数据,如Integer, String, Double等将相应的基本数据类型包装起来的类。这些类数据全部存在于堆中,Java用new()语句来显示地告诉编译器,在运行时才根据需要动态创建,因此比较灵活,但缺点是要占用更多的时间。 4. String是一个特殊的包装类数据。即可以用String str = new String("abc");的形式来创建,也可以用String str = "abc";的形式来创建(作为对比,在JDK 5.0之前,你从未见过Integer i = 3;的表达式,因为类与字面值是不能通用的,除了String。而在JDK 5.0中,这种表达式是可以的!因为编译器在后台进行Integer i = new Integer(3)的转换)。前者是规范的类的创建过程,即在Java中,一切都是对象,而对象是类的实例,全部通过new()的形式来创建。Java中的有些类,如DateFormat类,可以通过该类的getInstance()方法来返回一个新创建的类,似乎违反了此原则。其实不然。该类运用了单例模式来返回类的实例,只不过这个实例是在该类内部通过new()来创建的,而getInstance()向外部隐藏了此细节。那为什么在String str = "abc";中,并没有通过new()来创建实例,是不是违反了上述原则?其实没有。应该可以懂了,如果不懂再给点东西给你看.