南昌IT培训
美国上市IT培训机构
18357109557
17)Java中应该使用什么数据类型来代表价格?
如果不是特别关心内存和性能的话,使用BigDecimal,否则使用预定义精度的double类型。
18)怎么将byte转换为String?
可以使用String接收byte[]参数的构造器来进行转换,需要注意的点是要使用的正确的编码,否则会使用平台默认编码,这个编码可能跟原来的编码相同,也可能不同。
19)Java中怎样将bytes转换为long类型?
这个问题你来回答:-)
20)我们能将int强制转换为byte类型的变量吗?如果该值大于byte类型的范围,将会出现什么现象?
是的,我们可以做强制转换,但是Java中int是32位的,而byte是8位的,所以,如果强制转化是,int类型的高24位将会被丢弃,byte类型的范围是从-128到128。
21)存在两个类,B继承A,C继承B,我们能将B转换为C么?如C = (C) B;
22)哪个类包含clone方法?是Cloneable还是Object?
java.lang.Cloneable是一个标示性接口,不包含任何方法,clone方法在object类中定义。并且需要知道clone()方法是一个本地方法,这意味着它是由c或c++或其他本地语言实现的。
23)Java中++操作符是线程安全的吗?(答案)
23)不是线程安全的操作。它涉及到多个指令,如读取变量值,增加,然后存储回内存,这个过程可能会出现多个线程交差。
24)a
= a + b与a += b的区别(答案)
+=隐式的将加操作的结果类型强制转换为持有结果的类型。如果两这个整型相加,如byte、short或者int,首先会将它们提升到int类型,然后在执行加法操作。如果加法操作的结果比a的最大值要大,则a+b会出现编译错误,但是a += b没问题,如下:
byte a = 127;
byte b = 127;
b = a + b; // error : cannot convert from int to byte
b += a; // ok
(译者注:这个地方应该表述的有误,其实无论a+b的值为多少,编译器都会报错,因为a+b操作会将a、b提升为int类型,所以将int类型赋值给byte就会编译出错)
25)我能在不进行强制转换的情况下将一个double值赋值给long类型的变量吗?
不行,你不能在没有强制类型转换的前提下将一个double值赋值给long类型的变量,因为double类型的范围比long类型更广,所以必须要进行强制转换。
26)3*0.1
== 0.3将会返回什么?true还是false?(答案)
false,因为有些浮点数不能完全精确的表示出来。
27)int和Integer哪个会占用更多的内存?(答案)
Integer对象会占用更多的内存。Integer是一个对象,需要存储对象的元数据。但是int是一个原始类型的数据,所以占用的空间更少。
28)为什么Java中的String是不可变的(Immutable)?
Java中的String不可变是因为Java的设计者认为字符串使用非常频繁,将字符串设置为不可变可以允许多个客户端之间共享相同的字符串。更详细的内容参见答案。
29)我们能在Switch中使用String吗?
从Java 7开始,我们可以在switch
case中使用字符串,但这仅仅是一个语法糖。内部实现在switch中使用字符串的hash code。
30)Java中的构造器链是什么?
当你从一个构造器中调用另一个构造器,就是Java中的构造器链。这种情况只在重载了类的构造器的时候才会出现。