1、Java 中应该使用什么数据类型来代表价格?
如果不是很关心内存和性能的话,使用BigDecimal(大数据对象)。否则使用预定义精度的double类型。
2 、怎么将 byte 转换为 String?
1、使用String 接受byte[] 参数的构造器来进行转换
(注意:使用正确编码,否则会是平台默认编码)
3、我们能将 int 强制转换为 byte 类型的变量吗?如果该值大于 byte 类型的范围,将会出现什么现象?
1、可以强制将int转换为byte类型的变量
2、int是32位,byte是8位,所以int类型的高24位将会被丢弃,出现精度损失问题。
3、byte类型范围-128到128。
4、哪个类包含 clone 方法?是 Cloneable 还是 Object?
1、java.lang.Cloneable 是一个标示性接口,不包含任何方法
2、clone方法被定义在Object类中
3、clone()方法是一个本地方法,底层是用C或者C++实现的
5 、Java 中 ++操作符是否是线程安全的?
Java中的++操作符不是线程安全的。
其涉及多个指令,例如:读取、增加、存储,这个过程可能涉及多个线程交叉。
6、a = a + b 与 a += b 的区别
1、性能:
a = a + b,需要两次寻址
a += b,只需要一次寻址
效率后者自然略高于前者
2、可读性:
a = a + b,可读性高
a += b,可读性相对低一点
3、数据类型不同时:
【1】 short a = 10;
a = a + 20; // 编译时报错 20是int --> 转short时报错
【2】 short a = 10;
a += 20; // 30
【注:高精度转为低精度必须强制类型装换,且有精度损失现象】
7、为什么 Java 中的 String 是不可变的(Immutable)?
Java中String变量是不可变的。
因为设计者认为String使用很频繁,将其设置为不可更改方便多个客户端之间共享
8、Java 中的构造器链是什么?
1、构造器链:从一个构造器中调用另一个构造器。
2、构造器链只有在重载了类的构造器的时候才会出现。
9、怎样通过 Java 程序来判断 JVM 是 32 位 还是 64 位?
通过检查某些系统属性如,sun.arch.data.model或者os.arch来获取该信息。
10、JRE、JDK、JVM、JIT分别是什么?
1、JRE:Java runtime environment,java运行环境。运行Java所必须的
2、JDK:Java development kit,java开发工具包。比如java编译器
3、JVM:Java virtual machine,Java虚拟机。用来运行Java应用
4、JIT:just in time compilation,即时编译。
11、解释 Java 堆空间及 GC?
1、当通过Java命令启动Java进程时,JVM就会分配内存,而内存的一部分用于创建堆空间。
2、当程序继续创建对象时,就会从堆空间中分配内存。
3、而GC就是JVM内部的一个进程,回收无效对象时的内存用于将来的分配。
12、能保证 GC 执行吗?
不能。虽然可以调用System.gc()或者Runtime.gc(),但是没有办法保证GC执行。
13、Java 中堆和栈有什么区别?
1、栈:
用于保存方法帧和局部变量,不允许多个线程共享。
2、堆:
对象总是在堆上分配,被JVM上的所有线程共享。
【注:栈通常比堆小】
14、 “a==b”和”a.equals(b)”有什么区别?
1、当a 与 b 都是对象时,a == b 是比较两个对象的引用。
只有当a和b指向堆中的同一个对象时,才返回true。
2、a.equals(b)是进行逻辑比较,通常需要重写该方法来提供逻辑一致性。
比如,重写String类的equals()方法。
15、final、finalize、finally的不同?
final:
是一个修饰符,用于修饰变量、方法、类。被它修饰的意味着初始化后不能再更改。
finalize():
是对象被回收之前调用的finalize()方法,给对象一个复活的机会,但是是什么时候调用,没法保证。
finally:
是一个关键字,与try/catch一起用于异常处理,finally一定会执行,用于关闭一些流。
16、Java中什么是编译器常量?实用风险?
编译器常量:即,公共静态不可变变量(public static final)。
风险:实际上这些变量在编译时会被替换掉,因为编译器知道这些变量的值,
并且知道这些变量在运行时不能改变。这种方式存在的一个问题是你使
用了一个内部 的或第三方库中的公有编译时常量,但是这个值后面被
其他人改变了,但是你的客户端仍然在使用老的值,甚至你已经部署了
一个新的jar。为了避免这种情况, 当你在更新依赖 JAR 文件时,确
保重新编译你的程序。
17、poll() 方法和 remove() 方法的区别?
poll():
从队列中取出一个元素,获取元素失败时,返回空。
remove():
从队列中获取一个元素,获取元素失败时,抛出异常。
18、实现集合的排序的方法?
1、使用有序集合,TreeSet或者TreeMap
2、使用有顺序的集合list,通过Collections.sort()来实现排序。
19、java中数组如何打印?
使用Arrays.toString()和Arrays.deepToString()