拆装箱 == 与equals int 和Integer 堆和栈
2016-05-16 13:21
316 查看
2016年5月16日 开始我工作后的第一篇博客,主要总结一下在工作中java基础部分的一些困惑。与大家分享,欢迎大家一起讨论探究。
(1)java自动装箱与拆箱 jdk1.5之后引入的新的内容
在许多情况下包装与解包装是由编译器自行完成的
装箱:可以理解为基本数据类型封装为对象类型,来符合java的面向对象思想
例子 Integer a = new Integer(1);
装箱 : Integer a = 1; (原则1属于基本数据类型,不能直接赋值给一个Integer对象类型,但jdk1.5之后,可以这样写了,自动装箱)
拆箱:j就是讲对象类型转化为基本数据类型
例子: Integer a = 1;(装箱)
int b = a ; (拆箱)
自动装拆箱好处:对象不能直接运算,需要转化基本类型做加减乘除
例子: Integer a = 5;
//计算时自动拆箱
Sysout.out.print(num--);
拆装箱的设计是一种亨元模式
java定义:在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个 Integer对象;
自动拆装箱不仅在基本数据类型中有应用, String也可以。
(2)== 与 equals 区别
例子:
[align=left] String str1 =newString("china");[/align]
[align=left] String str2 =newString("china");[/align]
System.out.println("==
:"+ (str1 == str2));
System.out.println("equal:"+
str1.equals(str2));
[align=left] String str3 ="java";[/align]
[align=left] String str4 ="java";[/align]
System.out.println("==
:"+ (str3 == str4));
System.out.println("equal:"+
str3.equals(str4));
结果:
==:false
equal: true
== : true
equal:true
==
比较的是二个对象的地址
equals
比较是二个对象的值,String类型的equals相对的Object类型重新的equals方法
每次通过new创建的对象,都会在内存中创建一个对象,所有通过new来的对象地址是不同;
(3)堆和栈
堆简单说,类似于链表,对是不连续,可以自己申请开辟空间。开辟空间时,系统会遍历所有堆内存,直到找到第一块,大于等于需要的内存空间为止。如果申请内存大于需要内存空间,系统会把多余的释放掉。
读取速度比较慢。
栈:读取速度快,有操作系统自动分配,系统满足申请空间,就分配,不满足,就报内存溢出。
-------------------------------------------------------------------------------转载注明出处---------------------------------------------------------------------------------------------------------------------------
(1)java自动装箱与拆箱 jdk1.5之后引入的新的内容
在许多情况下包装与解包装是由编译器自行完成的
装箱:可以理解为基本数据类型封装为对象类型,来符合java的面向对象思想
例子 Integer a = new Integer(1);
装箱 : Integer a = 1; (原则1属于基本数据类型,不能直接赋值给一个Integer对象类型,但jdk1.5之后,可以这样写了,自动装箱)
拆箱:j就是讲对象类型转化为基本数据类型
例子: Integer a = 1;(装箱)
int b = a ; (拆箱)
自动装拆箱好处:对象不能直接运算,需要转化基本类型做加减乘除
例子: Integer a = 5;
//计算时自动拆箱
Sysout.out.print(num--);
拆装箱的设计是一种亨元模式
java定义:在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个 Integer对象;
自动拆装箱不仅在基本数据类型中有应用, String也可以。
(2)== 与 equals 区别
例子:
[align=left] String str1 =newString("china");[/align]
[align=left] String str2 =newString("china");[/align]
System.out.println("==
:"+ (str1 == str2));
System.out.println("equal:"+
str1.equals(str2));
[align=left] String str3 ="java";[/align]
[align=left] String str4 ="java";[/align]
System.out.println("==
:"+ (str3 == str4));
System.out.println("equal:"+
str3.equals(str4));
结果:
==:false
equal: true
== : true
equal:true
==
比较的是二个对象的地址
equals
比较是二个对象的值,String类型的equals相对的Object类型重新的equals方法
每次通过new创建的对象,都会在内存中创建一个对象,所有通过new来的对象地址是不同;
(3)堆和栈
堆简单说,类似于链表,对是不连续,可以自己申请开辟空间。开辟空间时,系统会遍历所有堆内存,直到找到第一块,大于等于需要的内存空间为止。如果申请内存大于需要内存空间,系统会把多余的释放掉。
读取速度比较慢。
栈:读取速度快,有操作系统自动分配,系统满足申请空间,就分配,不满足,就报内存溢出。
-------------------------------------------------------------------------------转载注明出处---------------------------------------------------------------------------------------------------------------------------
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序