Java基础面试题总结 Java基础面试题总结 Java有哪些特点 Java的特性 描述一下值传递和引用传递的区别 ==和 equals 区别是什么 String 中的 equals 是如何重写的 为什么重写equals方法必须重写hashcode方法 String s1=new String(abc)在内存中创建了几个对象 String 为什么是不可变的、jdk源码中的String 如何定义的、为什么这么设计.
static关键字是干什么用的?
谈谈你的理解 final关键字是干什么用的?
谈谈你的理解 抽象类和接口的区别是什么 重写和重载的区别 byte的取值范围是多少,怎么计算出来的 HashMap 和 HashTable 的区别 HashMap 和 HashSet 的区别 HashMap的底层结构 HashMap的长度为什么是2的幂次方 HashMap多线程操作导致死循环问题 HashMap线程安全的实现有哪些 讲一下 HashMap put 的过程 ConcumentHashMap底层实现 Integer缓存池 UTF-8和 Unicode的关系 项目为UTF-8环境,charC=中',是否合法 Arrays.asList获得的List 应该注意什么 Collection 和 Collections 的区别 你知道 fail-fast 和 fail-safe 吗 ArrayList、LinkedList 和 Vector 的区别 Exception和Error有什么区别 String、StringBuilder 和 StringBuffer 有什么区别 动态代理是基于什么原理 int 和 Integer 的区别 Java提供了哪些VO方式 谈谈你知道的设计模式 Comparator和 Comparable有什么不同 Object类中一般都有哪些方法 Java泛型和类型擦除 反射的基本原理,反射创建类实例的三种方式是什么 强引用、若引用、虚引用和幻象引用的区别 final、finally 和 finalize( 的区别
内部类有哪些分类,分别解释一下 说出几种常用的异常 静态绑定和动态绑定的区别 绑定 静态绑定 动态绑定 动态绑定和静态绑定的特点 Java基础篇 Java有哪些特点 并发性的:你可以在其中执行许多语句,而不必一次执行它 面向对象的:基于类和面向对象的编程语言.
独立性的:支持一次编写,到处运行的独立编程语言,即编译后的代码可以在支持Java的 平台上运行.
object Java Class Oriented Based Java的特性 Java的特性有如下这几点 简单,Java会让你的工作变得更加轻松,使你把关注点放在主要业务逻辑上,而不必关心指 针、运算符重载、内存回收等与主要业务无关的功能.
便携性,Java是平台无关性的,这意味着在一个平台上编写的任何应用程序都可以轻松移植到另 一个平台上.
安全性,编译后会将的代码转换为字节码,人类无法读取.
它使开发无病毒,无纂改的系 统/应用成为可能.
动态性,它具有适应不断变化的环境的能力,它能够支持动态内存分配,从而减少了内存浪费, 提高了应用程序的性能.
分布式,Java提供的功能有助于创建分布式应用.
使用远程方法调用(RMI),程序可以通过网 络调用另一个程序的方法并获取输出.
您可以通过从互联网上的任何计算机上调用方法来访问文 件.
这是革命性的一个特点,对于当今的互联网来说太重要了.
健壮性,Java有强大的内存管理功能,在编译和运行时检查代码,它有助于消除错误.
高性能,Java最黑的科技就是字节码编程,Java代码编译成的字节码可以轻松转换为本地机器 代码.
通过JIT即时编译器来实现高性能.
解释性,Java被编译成字节码,由Java运行时环境解释.
多线程性,Java支持多个执行线程(也称为轻量级进程),包括一组同步原语.
这使得使用线程 编程更加容易,Java通过管程模型来实现线程安全性.
描述一下值传递和引用传递的区别 要想真正理解的话,可以参考这篇文章:https:/.zhihu./question/31203609 简单理解的话就是 值传递是指在调用函数时将实际参数复制一份到函数中,这样的话如果函数对其传递过来的形式参数 进行修改,将不会影响到实际参数 引用传递是指在调用函数时将对象的地址直接传递到函数中,如果在对形式参数进行修改,将影响到 实际参数的值.
==和equals区别是什么 ==是Java中一种操作符,它有两种比较方式 对于基本数据类型来说,==判断的是两边的值是否相等 public class DoubleCompareAndEquals { 2 3 Person person1 = new Person(24 "boy"); 4 Person person2 =new Person(24 "girl"); 5 intc=10; 6 7 private void doubleCompareC){ 8 9 int a =10; 10 int b =10; 11 12 System.out.println(a == b); 13 System.out.println(a == c); 14 System.out.println(person1.getIdC) == person2.getIdC)); 15 16 17 对于引用类型来说,==判断的是两边的引用是否相等,也就是判断两个对象是否指向了同一 块内存区域.
private void equals(){ 2 3
equals是Java中对象的父类,即Object 类定义的一个方法.
它只能比较对象,它表示的是 引用双方的值是否相等.
所以记住,并不是说==比较的就是引用是否相等,equals比较的就是值,这 需要区分来说的.
equals用作对象之间的比较具有如下特性 自反性:对于任何非空引i用x来说,x.equals(x)应该返回true.
对称性:对于任何非空引i用x和y来说,若x.equals(y)为true,则y.equals(x)也为true.
传递性:对于任何非空引用的值来说,有三个值,x、y和z,如果x.equals(y)返回true, y.equals(z)返回true,那么x.equals(z) 也应该返回true.
一致性:对于任何非空引用x和y来说,如果x.equals(y)相等的话,那么它们必须始终相等.
非空性:对于任何非空引l用的值x来说,x.equals(null必须返回false.
String中的equals是如何重写的 String代表的是Java中的字符串,String类比较特殊,它整个类都是被final修饰的,也就是 说,String不能被任何类继承,任何修改String字符串的方法都是创建了一个新的字符串.
equals方法是Object类定义的方法,Object是类的父类,当然也包括String,String重写了 equals方法,下面我们来看看是怎么重写的 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; inti=0; while (n--1= 0){ if(v1[]1=v2[i]) return false; i; return true; return false; 首先会判断要比较的两个字符串它们的引用是否相等.
如果引用相等的话,直接返回true,不相 等的话继续下面的判断 然后再判断被比较的对象是否是String的实例,如果不是的话直接返回false,如果是的话,再比 较两个字符串的长度是否相等,如果长度不想等的话也就没有比较的必要了;长度如果相同,会比 较字符串中的每个字符是否相等,一旦有一个字符不相等,就会直接返回false.
下面是它的流程图
是 判断引用是 true 否相等 否 否 判断对象是否是 false String的实例 是 否 判断String长度 false 是否相等 是 不相等 false 逐个比较字符, 如果有字符 相等 true 这里再提示一下,你可能有疑惑什么时候是 if(thisanObject){ 2 return true; E 这个判断语句如何才能返回true?
因为都是字符串啊,字符串比较的不都是堆空间吗,猛然一看发现好 像永远也不会走,但是你忘记了String.intern)方法,它表示的概念在不同的JDK版本有不同 的区分 在JDK1.7及以后调用intern方法是判断运行时常量池中是否有指定的字符串,如果没有的话,就把字 符串添加到常量池中,并返回常量池中的对象.