为了账号安全,请及时绑定邮箱和手机立即绑定

Java中的数据类型(1)

标签:
Java

把我自己觉得该交代基础内容的都交代了需要铺垫的都铺垫了剩下就是要来点和实际开发工作密切相关的东西了

不过首先要说明

1、类似于什么Spring BootSpring Cloud之类的内容因为已经有无数人在讲了而且都讲的很好很详细就没有必要再去造轮子了

2、虽然没有框架内容但实际开发工作远不止是使用框架那么简单接下来的部分聚焦于和实际开发工作相关而且也是工作中高频会用到的技术内容有些内容较为分散我根据自己和前人的开发经验把这些内容做了一些归集

3、之前提过要控制时长,每篇内容力争控制在三分钟左右(内容<600字,现在来看保守了点)。不过精简实用有趣的原则不会变仍然会控制时长仍然认为大家的时间精力都是宝贵的多一秒钟都不应该浪费也力争控制在三分钟左右

4、不钻牛角尖任何一门技术学会20%的内容就可以解决80%的问题剩下的80%内容留在工作中去慢慢摸爬滚打用到了被坑过了肯定记忆深刻没被坑过说三十遍照样踩坑

5、按照软件开发过程中的说法这是第一轮迭代包括前两面的内容)。

-------------------分割线上面的内容不算字数-------------------

 

面试的时候问过不少人java中有几种数据类型10个人里面会有2个说不清楚3个要掰着指头数一下3个说有十几种但答不出来是哪十几种),剩下的2个中一个说8一个说9确切的答案是截至到JDK19,Java一共只有8种基本数据类型8种包装类型1String类型1种特殊类型Void8种基本数据类型是这8

https://img1.sycdn.imooc.com//633a22b300016b2f09720415.jpg


8种包装类型都是它们的包装器比如

int a = 1;
Integer b = 2;


这两个是不一样的东西一个是基本类型一个是包装器类型,变量值为实例对象并提供对象方法说人话就是一个是表示数值另一个除了能表示数值还能给这个对象提供一些常用方法例如

https://img1.sycdn.imooc.com//633a22bd0001279006030390.jpg


当然还有这种方式

Integer c = new Integer(1);


这种方式表示

1、对象c的存储空间是JVM堆上分配

2、new操作除了分配存储空间,还需要完成对象实例化。

就像这样

https://img1.sycdn.imooc.com//633a22c6000153b102770419.jpg


而前两种方式只不过是使用了一个保存在JVM堆这种的整形常量池main线程栈引用了这个常量池就像这样

https://img1.sycdn.imooc.com//633a22cd0001566a09150419.jpg


这两种方式所引起的差别可以通过测试看到例如

Integer a = 1;
Integer b = 1;
// 结果是true,因为都是引用常量池的数据,因此地址是一样的
System.out.println(a == b);
a = 1000;
b = 1000;
// 结果是false,因为没有引用常量池的数据,地址是不一样的,所以是false
System.out.println(a == b);


这就是我说的牛角尖

实际开发中没人会这么干String类型除外)。而且在接口中尽量不要使用包装器类型的数值,比如不要用get(Integer, Integer),而要使用get(int, int)这种声明方式

当然如果是准备面试八股背一背也无妨但然并卵——因为对一个新手来说如果没有任何开发经验就知道这些面试官可能会觉得你知道得太多了——结果就是嘿嘿

StringJava中的位置比较特殊因为它没有对应的基本类型之前看到有的人写string就觉得很搞)。它有几个基本的事实

1、只要被””括起来的字符串就是不可变的而且独一份

2、字符串在JVM中也有常量池相同内容的字符串在常量池只会存一份

3、字符串在使用"+="拼接的时候,底层使用的是StringBuilder

只要搞懂了下面的几种情况不管对于实际开发还是面试来说已经足够了

String a = "hello world";
String b = "hello" + " world";
// 结果是什么?为什么?
System.out.println(a == b);

a = "hello world";
b = "hello";
String c = " world";
String d = b + c;
// 结果是什么?为什么?
System.out.println(a == d);

a = "hello world";
final String e = "hello";
final String f = " world";
d = e + f;
// 结果是什么?为什么?
System.out.println(a == d);

除了这些常见类型还有提到过的特殊类型Void

1、某些场景下会用到Void类型,即当方法没有返回值时,如Future<Void>

2、Void也用于无值的Map中,例如Map<String, Void>

3、void.class == Void.TYPE(可以在编辑器中试试看这个结果是啥不用钻牛角尖知道结果就行啦^_^)


如果你还有其他问题,欢迎发表评论或私信留言。如果我不在,就跟机器先聊会~


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消