Java 面试知识点2

-什么时候用assert(假定、断言)?

假定、断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 Assertionerror。它主要用于调试:assert(a > 0); // throws an Assertionerror if a <= 0。
断言可以有两种形式:
assert Expression1 ; Expression1 应该总是产生一个布尔值。
assert Expression1 : Expression2 ; Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。
断言在默认情况下是禁用的。
要在编译时启用断言,需要使用 source 1.4 标记: javac -source 1.4 Test.java
要在运行时启用断言,可使用 -enableassertions 或者 -ea 标记。
要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。
要系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。
可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。


-GC是什麽? 为什麽要有GC?

GC是垃圾回收器。
Java 程序员不用担心内存管理,因为垃圾回收器会自动进行管理。可以请求垃圾回收,可以调用下面的方法之一:System.gc() 或者Runtime.getRuntime().gc()。


-String str = new String(“xyz”);创建了几个String Object?

创建了两个对象,一个是”xyx”; 一个是指向”xyx”的引用对象str。


-equals和hashCode方法重写equals方法时需要注意什麽?

Java中重写equals()方法的同时要重写hashcode()方法;
object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true;
注意:当此方法被重写时,通常有必要重写 hashCode() 方法,以维护 hashCode() 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。如下:
(1)当obj1.equals(obj2)为true时,obj1.hashCode() == obj2.hashCode()必须为true;
(2)当obj1.hashCode() == obj2.hashCode()为false时,obj1.equals(obj2)必须为false;
如果不重写equals,那么比较的将是对象的引用是否指向同一块内存地址,重写之后目的是为了比较两个对象的value值是否相等。特别指出利用equals比较八大包装对象(如int,float等)和String类(因为该类已重写了equals和hashcode()方法)对象时,默认比较的是值,在比较其它自定义对象时都是比较的引用地址。
hashcode是用于散列数据的快速存取,如利用HashSet/HashMap/Hashtable类来存储数据时,都是根据存储对象的hashcode值来进行判断是否相同的。
这样如果我们对一个对象重写了euqals,意思是只要对象的成员变量值都相等那么euqals就等于true,但不重写hashcode,那么我们再new一个新的对象,
当原对象.equals(新对象)等于true时,两者的hashcode却是不一样的,由此将产生了理解的不一致,如在存储散列集合时(如Set类),将会存储了两个值一样的对象,
导致混淆,因此,就也需要重写hashcode()方法。


-运行一下程序,结果是?
这里写图片描述

-运行一下程序,结果是?
这里写图片描述


-你有无穷的水和一个5公升的水桶和3公升的水桶,这两个水桶形状大小都不同 你怎麽才能准确称出4公升的水 写出详细流程? 

  1. 先往3公升的桶里装满水,然后将水全部倒进5公升桶里;
  2. 然后将3公升的桶再次装满水;接着再将这3公升的桶里的水倒进5公升的桶里;那麽5公升满了的时候 3公升里剩下1公升;
  3. 将5公升的桶腾空, 将3公升的桶剩下1公升的容量倒进这个空空的5公升桶里面,这时再装一次3 公升的水倒入5公升的桶里就完成了。

-不用任何函数库,分别实现int=321 和String=”abcde” 的反转。
只作参考:
这里写图片描述
这里写图片描述

这里写图片描述

猜你喜欢

转载自blog.csdn.net/yuki5233/article/details/70045580