范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Java基础面试知识点

  Java 基础知识相关Java中 == 和 equals 和 hashCode 的区别
  对于关系操作符 ==若操作数的类型是基本数据类型,则该关系操作符判断的是左右两边操作数的值是否相等若操作数的类型是引用数据类型,则该关系操作符判断的是左右两边操作数的内存地址是否相同。也就是说,若此时返回true,则该操作符作用的一定是同一个对象。
  对于使用 equals 方法,内部实现分为三个步骤:先比较引用是否相同(是否为同一对象),再判断类型是否一致(是否为同一类型),最后比较内容是否一致
  Java 中所有内置的类的 equals 方法的实现步骤均是如此,特别是诸如 Integer,Double 等包装器类。如以下 String 中的 equals 方法实现// String.java      public boolean equals(Object anObject) {         if (this == anObject) {             return true;         }         if (anObject instanceof String) {             String anotherString = (String)anObject;             int n = value.length;             if (n == anotherString.value.length) {                 char v1[] = value;                 char v2[] = anotherString.value;                 int i = 0;                 while (n-- != 0) {                     if (v1[i] != v2[i])                         return false;                     i++;                 }                 return true;             }         }         return false;     } 复制代码
  hashcode是系统用来快速检索对象而使用
  equals方法本意是用来判断引用的对象是否一致
  重写equals方法和hashcode方法时,equals方法中用到的成员变量也必定会在hashcode方法中用到,只不过前者作为比较项,后者作为生成摘要的信息项,本质上所用到的数据是一样的,从而保证二者的一致性参考Java 中的 ==, equals 与 hashCode 的区别与联系Effective Java 第 8,9 条int、char、long各占多少字节数
  Java 基本类型占用的字节数1字节: byte , boolean2字节: short , char4字节: int , float8字节: long , double
  注:1字节(byte)=8位(bits)int与integer的区别Integer是int的包装类,int则是java的一种基本数据类型Integer变量必须实例化后才能使用,而int变量不需要Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值Integer的默认值是null,int的默认值是0对 Java 多态的理解
  多态是指父类的某个方法被子类重写时,可以产生自己的功能行为,同一个操作作用于不同对象,可以有不同的解释,产生不同的执行结果。
  多态的三个必要条件:继承父类。重写父类的方法。父类的引用指向子类对象
  然后可以使用结合里氏替换法则进一步的谈理解
  里氏替换法则 ---- 所有引用基类的地方必须能透明地使用其子类的对象子类必须完全实现父类的方法
  注意 在类中调用其他类时务必要使用父类或接口,如果不能使用父类或接口,则说明类的设计已经违背了LSP原则
  注意 如果子类不能完整地实现父类的方法,或者父类的某些方法在子类中已经发生"畸变",则建议断开父子继承关系,采用依赖、聚集、组合等关系代替继承子类可以有自己的个性覆盖或实现父类的方法时输入参数可以被放大覆写或实现父类的方法时输出结果可以被缩小
  在项目中,采用里氏替换原则时,尽量避免子类的"个性",一旦子类有"个性",这个子类和父类之间的关系就很难调和了, 把子类当做父类使用,子类的"个性"被抹杀——委屈了点;把子类单独作为一个业务来使用,则会让代码间的耦合关系变得扑朔迷离——缺乏类替换的标准String、StringBuffer、StringBuilder 区别
  StringBuffer 和 String 一样都是用来存储字符串的,只不过由于他们内部的实现方式不同,导致他们所使用的范围不同,对于 StringBuffer 而言,他在处理字符串时,若是对其进行修改操作,它并不会产生一个新的字符串对象,所以说在内存使用方面它是优于 String 的
  StringBuilder 也是一个可变的字符串对象,他与 StringBuffer 不同之处就在于它是线程不安全的,基于这点,它的速度一般都比 StringBuffer 快
  String 字符串的拼接会被 JVM 解析成 StringBuilder 对象拼接,在这种情况下 String 的速度比 StringBuffer 的速度快
  str +="b"等同于 str = new StringBuilder(str).append("b").toString();详解内部类
  内部类使得多重继承的解决方案变得更加完整
  使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响
  使用内部类才能实现多重继承内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。创建内部类对象的时刻并不依赖于外围类对象的创建。内部类并没有令人迷惑的"is-a"关系,他就是一个独立的实体。内部类提供了更好的封装,除了该外围类,其他类都不能访问。
  当我们在创建某个外围类的内部类对象时,此时内部类对象必定会捕获一个指向那个外围类对象的引用,只要我们在访问外围类的成员时,就会用这个引用来选择外围类的成员成员内部类
  在成员内部类中要注意两点,成员内部类中不能存在任何 static 的变量和方法成员内部类是依附于外围类的,所以只有先创建了外围类才能够创建内部类静态内部类
  静态内部类与非静态内部类之间存在一个最大的区别,我们知道非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围内,但是静态内部类却没有。没有这个引用就意味着:它的创建是不需要依赖于外围类的。它不能使用任何外围类的非static成员变量和方法。为什么Java里的匿名内部类只能访问final修饰的外部变量?
  匿名内部类用法public class TryUsingAnonymousClass {     public void useMyInterface() {         final Integer number = 123;         System.out.println(number);          MyInterface myInterface = new MyInterface() {             @Override             public void doSomething() {                 System.out.println(number);             }         };         myInterface.doSomething();          System.out.println(number);     } } 复制代码
  编译后的结果class TryUsingAnonymousClass$1         implements MyInterface {     private final TryUsingAnonymousClass this$0;     private final Integer paramInteger;      TryUsingAnonymousClass$1(TryUsingAnonymousClass this$0, Integer paramInteger) {         this.this$0 = this$0;         this.paramInteger = paramInteger;     }      public void doSomething() {         System.out.println(this.paramInteger);     } } 复制代码
  因为匿名内部类最终用会编译成一个单独的类,而被该类使用的变量会以构造函数参数的形式传递给该类,例如:Integer paramInteger,如果变量 不定义成final的,paramInteger在匿名内部类被可以被修改,进而造成和外部的paramInteger不一致的问题,为了避免这种不一致的情况,因为Java 规定匿名内部类只能访问final修饰的外部变量匿名内部类相关文章Java 面试题集抽象类和接口的区别默认的方法实现抽象类可以有默认的方法实现完全是抽象的。接口根本不存在方法的实现实现抽象类使用 extends 关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。子类使用关键字 implements 来实现接口。它需要提供接口中所有声明的方法的实现。抽象类可以有构造器,而接口不能有构造器抽象方法可以有public、protected和default这些修饰符。接口方法默认修饰符是public。你不可以使用其它修饰符。抽象类在java语言中所表示的是一种继承关系,一个子类只能存在一个父类,但是可以存在多个接口。抽象方法比接口速度要快,接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。如果往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。 如果你往接口中添加方法,那么你必须改变实现该接口的类泛型中 extends 和 super 的区别父类的静态方法能不能被子类重写
  静态方法与静态成员变量可以被继承,但是不能被重写。它对子类隐藏,因此静态方法也不能实现多态进程和线程的区别
  进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。final, finally, finalize的区别final 用于声明属性,方法和类, 分别表示属性不可变, 方法不可覆盖, 类不可继承.finally 是异常处理语句结构的一部分,表示总是执行.finalize 是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等. JVM不保证此方法总被调用.Parcelable和Serializable的区别
  Serializable是Java中的序列化接口,其使用起来简单但 是开销很大,序列化和反序列化过程需要大量I/O操作。而Parcelable是Android中的序列化方式,因此更适合用在Android平台上,它的缺点就是使用起来稍微麻烦 点,但是它的效率很高,这是Android推荐的序列化方式,因此我们要首选Parcelable。Parcelable主要用在内存序列化上,通过Parcelable将对象序列化到存储设备 中或者将对象序列化后通过网络传输也都是可以的,但是这个过程会稍显复杂,因此在这两种情况下建议大家使用Serializable。参考Android 开发艺术探索为什么非静态内部类里不可以有静态属性谈谈对kotlin的理解
  因人而异,请自行整理答案String 转换成 integer的方式及原理Integer a = 2; private void test() {     String s1 = a.toString();  //方式一     String s2 = Integer.toString(a);  //方式二     String s3 = String.valueOf(a);  //方式三 } 复制代码
  方式一源码:    public String toString() {         return toString(value);     }      public static String toString(int i) {         if (i == Integer.MIN_VALUE)             return "-2147483648";         int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);         char[] buf = new char[size];         getChars(i, size, buf);         return new String(buf, true);     } 复制代码
  可以看出方式一最终调用的是方式二
  通过toString()方法,可以把整数(包括0)转化为字符串,但是 Integer 如果是 null 的话,就会报空指针异常
  方式三源码:public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); } public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } 复制代码
  可以看出 当 Integer 是null的时候,返回的String是 字符串 "null" 而不是 null
  小编还整理了许多的java面试资料。如有需要的小伙伴可私信"面试"给小编即可获取哦

什么时候换手机合适呢,记住看这几个地方,完美的换机理由现在手机使用的非常广泛,智能手机也充斥着我们的学习工作和生活,通常情况下,一款手机的使用年限会随着使用程度使用时间的不同而产生差异,那什么时候才是该换手机的最佳时间呢,我们只需看这两极分化的大厂年终奖柔宇欠薪事件爆发,刘自鸿迎来至暗时刻股融易资讯今日话题两极分化的大厂年终奖有人拿120万,有人领自热火锅和文化衫12月8日,一位认证信息为某大厂员工的用户在社交平台发文称听来的各大厂今年的年终奖,有点卷起来的意思了,16K电视进阶4K和8K分辨率之后是什么?是时候开始考虑16K电视了吗?在电视制造商之间正在进行的超越竞争对手的竞赛中,技术标准不断被推向新的高度,这意味着16K分辨率继4K和8K之后的下一步已经到来。对于大多数家庭来说,C前沿传19家互联网大厂裁员商汤遭美国阻击或延期IPO国轩高科50GWh动力电池项目开工12月7日上午,国轩高科50GWh动力电池项目正式开工,该项目位于合肥新站高新区魏武路与新蚌埠路交口西南侧,占地面积约550亩,预计将于2023年qq群变身移动硬盘大家都知道QQ群要比微信群更好用,因为有更多功能,而且管理群成员也更方便。但其实QQ群还有一个更好用的地方,很多人可能还不知道,那就是当做一个移动网盘来使用。你看,建一个只有自己的花呗套路被发现?越来越多的人逃离花呗,他们察觉到了什么?银保监会曾指出,花呗的内核与银行发行的信用卡没有本质差别,并且分期手续费也要高于银行。虽然有免息期,但是很多人习惯了用花呗之后,借得越来越多没钱还了,最后也只能选择分期。经常使用花广东多家企业变卖工厂还贷款,员工提前返乡,这是为什么?特别是一些外向型企业,受到美国的影响,订单大量下滑,无可为继,只好出此下策,变卖工厂还掉建厂所用的贷款,等待时机东山再起。越南印度有一部分工厂已经成熟,中国小厂不再风光。目前中国要性价比小钢炮第三代iPhoneSE被曝明年Q1发布据MacRumors报道,DigiTimes报告援引业内人士说法称,新款iPhone13系列的订单未减少,并且苹果供应链中的多个零部件供应商正在为第三代iPhoneSE的发货做准备果粉iPhone13Pro已经用了7天,很想念iPhone6s相比iPhone12系列,很多人认为苹果今年发布的iPhone13系列是非常有诚意的。无论是硬件参数还是价格方面,新机iPhone13系列都有着不小的吸引力。所以,当iPhone1旗舰机与高端机的区别正式被确认,三个细节总结,望周知目前手机市场品牌众多,当然价格方面也不一样,也知道什么时候开始手机也分为高端机和旗舰机,并且现在所有国内手机厂商都已经布局高端手机市场。其实现阶段手机可以轻松地就做出一款旗舰机,但小米12传来新消息,MIUI13跟不上进度,芯片又出问题了随着摩托罗拉的新机全球首发了高通新一代的旗舰处理器骁龙8Gen1,国内各大手机厂商都坐不住了,首批骁龙8Gen1机型即将登场,为的就是抢占更大的市场。其中小米可以说是最着急的,此前
因德尔塔病毒开始扩散,2021纽约国际车展宣布取消汽车界最大的盛宴莫过于车展了,车展对于每一家车企的重要性不言而喻,就算是奔驰宝马奥迪这样的一线豪华品牌也需要车展来进行宣传,毕竟车展相比打广告来说效果更好。而一般品牌比如大众本田丰想买汉兰达的同学不妨再等等,其实这几款SUV也值得考虑今天朋友问我第四代丰田汉兰达怎么样,咱有一说一,车是好车,但是它的价格有点虚高,尤其是新能源版本,这个价格我去买宝马X3奥迪Q5奔驰GLC不好吗?所以今天给大家推荐几款不亚于汉兰达苹果13两大新突破苹果13上市在即。iPhone手机每年都会推出一款主打的新配色,今年的iPhone13大概率也会增加一个新配色,有人透露今年iPhone13新颜色为黄铜色。这不就在近日,海外爆料者上班摸鱼你得知道这些上班如何优雅的摸鱼玩手机,想必大家都很想知道吧。小编我在跟老板不断斗智斗勇的过程中,终于找到了一个神招!但欲练此功,首先得有一台vivo手机。借助vivo手机的互传功能,将手机上的小米入局美容仪市场,一切为了争取女性用户说到小米大家都知道,买小米的女性用户很少,一般都是对参数对配置都比较懂的发烧友花最少的钱买到最实用的产品。但对大部分女性用户来说是不是这样的,一般买东西靠颜值是首要。小米手机刚开始致敬华为mate40Pro,没有最好,只有更好华为mate40pro自2020年10月上市发售,一经发售就遭受各热心网民的疯抢,一度供不应求。截止到目前,华为官方旗舰店还一直处于缺货状态。华为Mate40Pro配备的是曲面OL被骗了!红米K40比吴亦凡还渣红米K40的手机虽然很强,性价比很高,当时也是看中了这些,忍不住在618之前就买了它。但随着我收到实机到现在过去了两个多月了,一些问题也随之而来,尤其是这几点,让我苦红米K40久矣2000元手机推荐系列RedmiK40的起售价只有1999元,应该是目前2000档位,性价比最高的一款手机。搭载旗舰级别的高通骁龙870,双存采用UFS3。1LPDDR5技术。除了强大的性能之外,正面采运动家轿新选择,长安UNI首款轿车公告图正式发布说起长安UNI系列,我想大家首先会想到SUV,毕竟UNITUNIK这两款SUV在国内有着非常高的呼声。而长安汽车也是趁热打铁,推出了UNI系列首款轿车,新车造型依然延续了UNI家族搭载英菲尼迪Q60发动机,日产ZCoupe将8月17日全球首发近日我们通过神奇的海外媒体获悉了一则重磅消息,日产ZCoupe将于本月17日正式发布,新车采用了经典的GTR造型,造型绝对让您满意。外观方面采用了日产经典车系元素设计,盾型进气格栅日产200亿美元研发了一台三缸发动机?主播吹得有点过分了近日日产奇骏成为了汽车界的一大热搜选项,起因就是它那台1。5T三缸发动机,虽然有着204马力的动力加持,但是再强的动力也搁不住三缸是最大的败笔。而近日某知名主播可谓是把日产奇骏给推