Java盲点解析
Java盲点解析
闵开慧 发表于5年前
Java盲点解析
  • 发表于 5年前
  • 阅读 75
  • 收藏 1
  • 点赞 0
  • 评论 1

新睿云服务器60天免费使用,快来体验!>>>   

摘要: Java盲点解析

1 堆栈区别

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

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

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

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

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

2 重写与重载区别

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

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

3 java构造器

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

        class A

         {

            public A()

            {

            }

        }

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

        class A

         {

            public A(String a,String b)

            {

            }

        }

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

        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不可以)


标签: Java盲点解析
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 329
博文 601
码字总数 267073
评论 (1)
alphabeta
好,楼主总结真好
×
闵开慧
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: