Java基础知识问答

1.整型中byte、short、int、long的取值范围?什么是浮点型?什么是单精度和双精度?为什么不能用浮点型表示金额?

小疑问:为什么最小值可以到-128???
答: byte : (最小值-128 ,最大值127,即 2的7次方-1)
short: 可取的最大值的常量,最大值为 2的15次方-1。(32 767)
可取的最小值的常量,最小值为 -2的15次方。(-32 768)
int: 可取的最大值的常量,最大值为 2的31次方-1。可取的最小值的常量,最小值为 -2的31次方 的常量。
long: 可取的最大值的常量,最大值为 2的63次方-1,可取的最小值的常量,最小值为-2的63次方

浮点型分为单精度浮点数float 和双精度浮点数double
其实两者没什么区别,就是一个精确度的问题,double的精确度要比float 高,在计算比较小的数时两者没什么区别,如果计算比较大的数要用double,两者关系就象int 和 long 的关系差不多
小疑问:为什么不能用浮点型表示金额的原因涉及到《计算机组成原理》那章的知识,笔者现在也忘记的差不多了
详情参考;https://blog.csdn.net/bruce128/article/details/52529734

2.熟悉Java中的各种关键字,transient、instanceof、final、static、volatile、synchronized、const 原理及用法

答:
①transient: 在讨论transient之前,有必要先搞清楚Java中序列化的含义;
Java中对象的序列化指的是将对象转换成以字节序列的形式来表示,这些字节序列包含了对象的数据和信息,一个序列化后的对象可以被写到数据库或文件中,也可用于网络传输,一般当我们使用缓存cache(内存空间不够有可能会本地存储到硬盘)或远程调用rpc(网络传输)的时候,经常需要让我们的实体类实现Serializable接口,目的就是为了让其可序列化。
当然,序列化后的最终目的是为了反序列化,恢复成原先的Java对象,要不然序列化后干嘛呢,所以序列化后的字节序列都是可以恢复成Java对象的,这个过程就是反序列化。
Java中transient关键字的作用,简单地说,就是让某些被修饰的成员属性变量不被序列化,这一看好像很好理解,就是不被序列化,那么什么情况下,一个对象的某些字段不需要被序列化呢?如果有如下情况,可以考虑使用关键字transient修饰:
1、类中的字段值可以根据其它字段推导出来,如一个长方形类有三个属性:长度、宽度、面积(示例而已,一般不会这样设计),那么在序列化的时候,面积这个属性就没必要被序列化了;
2、其它,看具体业务需求吧,哪些字段不想被序列化;
②instanceof
instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:

boolean result = obj instanceof Class

其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。
  注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。

3.什么是包装类型,什么是基本类型,什么是自动拆装箱?

答:
①包装类即使把基本类型变成对象类型
像ArrayList这样的集合是不能储存基本类型的只能储存对象 为了方便这些集合的使用所以才有了把基本类型包装成对象类型
ArrayList al = new ArrayList();

②在讨论其他变量类型之间的相互转换时,需要了解一下Java的包装类,所谓包装类,就是能够直接将简单类型的变量表示为一个类,在执行变量类型的相互转换时,会大量使用这些包装类。Java共有六个包装类,分别是Boolean、Character、Integer、Long、Float和Double,从字面上就能够看出分别对应于 boolean、char、int、long、float和double。而String和Date本身就是类。所以也就不存在什么包装类的概念了。

4.Integer的缓存机制解释?

详情参考:(该链接中的num9==num10 true这个是重点,以及基本数据类型跟其包装类型做比较时,不需要关注到底是否是new出来,因为最终都要拆箱,最终都要将比较变成基本数据类型的比较
小知识:Integer是对小数据(-128~127)是有缓存的
https://blog.csdn.net/losetowin/article/details/49968365

5.了解JDK 6和JDK 7中substring的原理及区别

答:详情参考:https://www.cnblogs.com/dsitn/p/7151624.html
(重点:JDK 6中的substring
String是通过字符数组实现的。在jdk 6 中,String类包含三个成员变量:char value[], int offset,int count。他们分别用来存储真正的字符数组,数组的第一个位置索引,字符串中包含的字符个数。)

下面看一下jdk6里面的string(),substring()
在这里插入图片描述在这里插入图片描述
下面来看一下jdk7里面的
在这里插入图片描述
(小疑问:对下面的这个value还是没有变化的,这跟上图不符和啊???)
在这里插入图片描述

6.java replace和replaceAll以及replaceFirst的区别以及用法

答:详情参考:(主要是replace只支持字符串直接替换,而replaceAll以及replaceFirst支持正则表达式替换,也支持字符串直接替换)https://blog.csdn.net/anmoyyh/article/details/70673812

7.String对“+”的重载、字符串拼接的几种方式和区别?

答:String对“+”的重载见参考链接:https://blog.csdn.net/u011479200/article/details/83116923
其实String对+的支持其实就是使用了StringBuilder以及他的append、toString两个方法。
在这里插入图片描述
字符串的3种拼接方式详情参考链接如下:https://blog.csdn.net/dawanganban/article/details/39236563
在这里插入图片描述

8.String.valueOf()和Integer.toString()的区别?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java全栈研发大联盟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值