前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java盲点解析

Java盲点解析

作者头像
闵开慧
发布2018-03-30 12:40:16
6880
发布2018-03-30 12:40:16
举报
文章被收录于专栏:闵开慧

1 堆栈区别

    Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等 指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时 动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。

栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类 型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。

    堆和栈的区别可以用如下的比喻来看出:

    使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。

    使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。

2 重写与重载区别

    重写是子类的方法覆盖父类的方法,要求方法名和参数都相同

    重载是在同一个类中的两个或两个以上的方法,拥有相同的方法名,但是参数却不相同,方法体也不相同,最常见的重载的例子就是类的构造函数,可以参考API帮助文档看看类的构造方法

3 java构造器

    构造器就是和类名相同但无返回类型的方法比如

代码语言:javascript
复制
 class A
  {
     public A()
     {
     }
 }

    其中A方法 就是class A的构造器 虽然构造器没有返回值但可以有参数如

代码语言:javascript
复制
 class A
  {
     public A(String a,String b)
     {
     }
 }

    一个类也可以有多个构造器如

代码语言:javascript
复制
 class A
  {
     public A()
     {
     }
      public A(String a,String b)
     {
     }
 }

    当你new A()时则无参那个构造器被调用,当你new A("ddd","fff")时,那个有参的构造器被调用,如果你没有写构造器则jvm会调用一个默认的无参的构造器

    构造器在类初始化的时候被调用通常被用来做一些初始化的工作。构造器不可以重载但可以重写。

4 hasecode:对象在内存中的首地址

    只是为了维护 hashCode 方法的常规协定,才要求用equals比较的两个对象的hashCode相同. equals()和hashCode()都来自java.lang.Object.你当然可以重写.  比如a.equals(b).仅当a的内存地址相等时,才返回true.当然如String等类已经对这个方法进行了重写,比较的就不再是内存地址了. hashCode()的值也是与内存地址相关的.所以仅当内存地址相等时,hashCode才相等.

    简单数据类型和封装类中的equals和== Java为每一个简单数据类型提供了一个封装类,每个基本数据类型可以封装成对象类型。  除int(Integer)和char(Character),其余类型首字母大写即成封装类类型名。double (Double), float(Float),long(Long), short(Short),byte(Byte),boolean(Boolean).    以int和Integer为例说明  Java中int和Integer区别如下:

1.int是基本的数据类型,默认值可以为0;

2.Integer是int的封装类,默认值为null;

3.int和Integer都可以表示某一个数值;

4.int和Integer不能够互用,因为他们两种不同的数据类型;

int a1=1; int a2=1;

Integer b1 =new Integer (1);

Integer b2 =new Integer (1);

------------------------------

a1==a2 这个是成立的,很简单,都知道 a1==b1 这个是不成立的.表达式的值为 false ,它们是不同的数据类型(在jdk1.5以上版本中为true) b1==b2 这个也是不成立的.表达式的值为 false,虽然是相同的数据类型,但是它们是两个对象,==比较的是2个对象的地址,它们的地址是不相等的,内容相等都是1; b1.equals(b2)==true 这个是成立的,表达式的值为 true. 相同数据类型,两个对象,地址不同,内容相同, quals比较的是2个对象的内容,所以成立。 (a.equals(b),因为equals比较的是两个对象,所以a,b都不能为基本数据类型,否则会出编译错误。)(在jdk1.5以上版本中,b可以为基本数据类型,a不可以)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档