1、Java跨平台运行的原理?
1、.java 源文件要先编译成与操作系统无关的 .class 字节码文件,然后字节码文件再通过 Java 虚拟机解释成机器码运行。
2、.class 字节码文件面向虚拟机,不面向任何具体操作系统。
3、不同平台的虚拟机是不同的,但它们给 JDK 提供了相同的接口。
4、Java 的跨平台依赖于不同系统的 Java 虚拟机。
2、==
和 equals
的区别?
==
:对于基本数据类型和引用数据类型的作用效果是不同的,如下所示:
基本类型:比较值是否相等。
引用类型:比较引用是否相同。
特殊:对于String类型的变量,如果是字符串常量则比较值是否相等,其它情况比较引用是否相同。
equals():它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
情况1:类没有重写 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。
情况2:类重写了 equals() 方法,则按照重写的比较方式,一般我们都重写 equals() 方法来比较两个对象的内容是否相等。
3、是否能自己写个类,叫做 java.lang.String?
可以,但在应用的时候,需要用自己的类加载器去加载,否则,系统的类加载器永远只是去加载JDK中的那个 java.lang.String。在 Tomcat 的 Web 应用程序中,都是由 webapp自己的类加载器先自己加载 WEB-INF/classes目录中的类,然后才委托上级的类加载器加载,如果我们在 Tomcat的 Web应用程序中写一个 java.lang.String,这时候 Servlet 程序加载的就是我们自己写的 java.lang.String,但是这么做就会出很多潜在的问题,原来所有用了 java.lang.String 类的都将出现问题。
4、作用域public、private、protected、package-private以及不写时的区别?
public: 公共的具有最大的访问权限,被public 修饰的类,属性和方法不仅可以在类的内部访问也可以在类的外部访问。
protected: 受保护的,被protected修饰的类,属性和方法可以在本类中或者在其子类中被访问,即使子类和它不在同一个包。
package-private: 只允许在同一个包中进行访问。
private: 只能在本类中被访问。
不写的时候默认为 package-private。
作用域 | 当前类 | 同一包 | 子孙类 | 其他包 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
package-private | √ | √ | × | × |
private | √ | × | × | × |
5、final与static的区别?
都可以修饰类、方法、成员变量。
都不能用于修饰构造方法。
static 可以修饰类的代码块,final 不可以。
static 不可以修饰方法内的局部变量,final 可以。
6. List、Set、Map 之间的区别是什么?
List | 有序集合,元素可重复 |
Set | 不重复集合,LinkedHashSet按照插入排序,SortedSet可排序,HashSet无序 |
Map | 键值对集合,存储键、值和之间的映射,Key无序,唯一,value 不要求有序,允许重复 |