Java学习日记~2020年10月26日

基本数据类型

整数类型

整数类型有byte、short、int、long。在不同位数的操作系统占用不同的字节。在64位操作系统中,它们分别占1、2、4、8个字节。

小数类型

小数类型有float和double,在64位操作系统中分别占用4和8个字节。double的表示范围比float更大,精度更高。

真假类型

boolean直接使用true和false赋值,表示真和假。

字符类型

字符类型char表示一个字符,通常占用2个字节。

数组类型

数组类型和基本类型的不同之处

基本类型的变量在内存中只会有一块对应的内存空间。而数组它是有两块的,一块是用于存储数组内容本身,另一块用于存储内容的位置。

数组用两块空间的好处 : 假如一个数组A长度是3,另一个数组B长度是5。如果把B赋值给了A,让A去把对应的内存空间直接存储B对应的内容,那是肯定不够的。但是两块空间存储就会简单的多。当把数组B赋值给数组A的时候,A直接将指针指向B的位置,数组A原先的内存空间因为不再被引用则被垃圾回收器给回收。

数组的长度一旦被定义了就不可再变化了,但是可以让数组重新指向一个长度不同的空间。

条件执行实现原理

程序最终都是一条条的指令,CPU有一个指令指示器,指向下一条要执行的指令,CPU根据指示器的指示加载指令然后执行。指令大部分是具体的操作和运算,在执行这些操作时,执行完一个操作后,指令指示器会自动指向挨着的下一条指令。但是也有一些比较特殊的指令,也就是"跳转指令",这些指令会修改指令指示器的值,让CPU跳到一个指定的地方执行。

跳转的方法有两种:一种是条件跳转,还有一种那就是无条件跳转,无条件跳转自然就是直接进行跳转。if else实际上就会转换为这些跳转指令

switch的原理

在程序源代码中,case值排列不要求是排序的,但是编译器会自动排序。在switch中case的值可以是byte、short、int、char、enum、String。其中byte、short、int本身就是整数,char本质上也是整数、枚举也有对应的整数、String用于switch的时候也会转化成整数。

当分支比较多的时候,使用条件跳转会进行很多次的运算,效率比较低,因此就会使用一种更高效的方式,那就是跳转表。跳转表是一个映射表,存储了可能的值以及要跳转到的地址。由于case中的值都会被转化成整数,然后整数会按照大小排序,排序好后的整数在查找的时候则可以使用二分查找,这样效率是比较高的。如果说值是连续的,跳转表还会进行特殊优化,优化成一个数组,直接下标索引。即使值不是连续的,编译器也可能会优化成一个数组型的跳转表,没有就指向default分支。

二分查找算法

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

public static int Method(int[] nums, int low, int high, int target){while (low <= high){//取中间值int middle = (low + high) / 2;//如果找到了就直接返回if (target == nums[middle]){return middle;}//没找到就判断是在左边还是右边然后折半进行查找,因此效率高else if (target > nums[middle]){low = middle + 1;}else if (target < nums[middle]){high = middle - 1;}}return -1;}
为什么switch不可以使用long?

因为跳转表值的存储空间一般是32位,容纳不下long。

简单总结

条件执行的语法是比较自然和容易理解的,需要注意的是其中的一些语法细节和陷阱。它执行的本质依赖于条件的跳转、无条件跳转和跳转表。条件执行中的跳转只会跳转到跳转语句以后的指令。如果跳转到以前的指令就会形成循环。

程序猿学习笔记~2020年10月26日(数据类型与条件语句)相关推荐

  1. 外企工作必备英语日积月累 -2020年10月26日,星期一

    今天学习了三个单词: Stakeholder stakeholder 这个词原义为:a person with an interest or concern in something, especia ...

  2. #1024#番外篇科普为什么1024是程序员日?2020年10月24日,程序员为啥都不放假?

    1.1024为啥是程序员日? 因为1GB=1024MB,1MB=1024KB 2.2020年10月24日,程序员为啥都不放假? 因为2020-1024=996 ("996"指的是早 ...

  3. 2020年10月31日

    2020年10月31日学习记录 leetcode刷题 第380题常数时间插入.删除和获取随即元素 解题思路:哈希拉链法,建立结点存储值.链表的长度以及下一个节点指针,建立一个结构体存储头指针,利用哈希 ...

  4. 2020年10月24日雅思考试(A类)

    本人打算备战雅思,转载我同学博客(巨佬一枚),顺便试试转载功能. 原文: https://blog.csdn.net/weixin_44077955/article/details/109920630 ...

  5. 【前沿】2020年10月24日马云外滩金融峰会演讲吃瓜

    [前沿]2020年10月24日马云外滩金融峰会演讲吃瓜 内容 2020.10.24 马云外滩金融峰会演讲完整版 马 云 最 新 演 讲 专家和学者的定义挺有意思.实践的理论,而不是办公室实践的理论. ...

  6. python 判断该地址 文件创建时间2020年10月14日14时25分32秒 文件最后一次访问时间 文件最后一次修改时间

    #1.判断该地址 #1.文件名 #2.文件路径 #3.文件扩展名 #4.文件创建时间2020年10月14日14时25分32秒 #5.文件最后一次访问时间 #6.文件最后一次修改时间 #7.文件的大小( ...

  7. 重装战姬服务器维护,重装战姬2020年10月1日更新维护公告_重装战姬2020年10月1日更新了什么_玩游戏网...

    在重装战姬手游中2020年10月1日更新了什么呢?本次更新的的情况内容又是什么呢?不清楚的小伙伴们,接下来就让我们一起来看一下吧! 亲爱的各位团长: 我们将于以下时间,对全平台服务器实施维护,进行游戏 ...

  8. 【财经期刊FM-Radio|2020年10月27日】

    [财经期刊FM-Radio|2020年10月27日] 微信公众号: 张良信息咨询服务工作室 [今日热点新闻一览↓↓] 美股创两个月最大跌幅,欧股一个月新低,中概电商股优于大盘,美债两周最大涨幅. 美国 ...

  9. 2020年10月21日,滴滴还在用大数据杀熟吗

    价格歧视是一种垄断定价行为,作为一种获得超额利润的手段,正在随着大数据技术的成熟被越来越广泛的应用在各行各业.滴滴作为一款国民级的出行平台也曾被爆出过此类行为. 2020年10月1日开始,<在线 ...

最新文章

  1. 自制青蛙跳台阶小游戏~
  2. SAS笔记(6) PROC MEANS和PROC FREQ
  3. Hadoop 跨集群复制文件
  4. 实现CStack类遇到的问题
  5. php 整行插入mysql_MySQL的多行插入
  6. java 桌面图标插件_JavaSwing界面设计(所有控件及示例)预览.ppt
  7. 27 Server Sockets
  8. 手机需不需要更新系统?
  9. 西门子s7 计算机通讯,PLC与计算机通讯连接
  10. teechart绘制实时曲线_基于OpenCV的显著图绘制
  11. (转载)Linux上iptables防火墙的基本应用教程
  12. 在FreeBSD 用户空间与内核空间使用内存共享
  13. php网站模板怎么改动,ECshop网站模板修改详细教程 and 模板对应的文件
  14. Hadoop集群安装配置教程_Hadoop2.6.0_UbuntuCentOS(林子雨教授,超级详细)
  15. Docker部署应用案例
  16. Android闹钟TimePicker,android – TimePicker getHours(),API 15中的getMinutes
  17. 对话罗永浩:手机行业唯一的聪明人死了,我胜算很大
  18. Linux文件目录sha256,如何使用 SHA256 校验下载的文件
  19. 视频结构化技术应用的必要性
  20. 计算机网络专业就业压力,网络工程专业就业形势研究

热门文章

  1. 中国海洋馆迎来“机器海豚”!每只2600万美元
  2. 域控服务器怎么统一改策略,使用域组策略及脚本统一配置防火墙
  3. 解决手机助手与 android sdk 的adb 冲突问题
  4. Emacs实现C++ 语法高亮、自动补全、各种跳转
  5. 3.2 Go语言从入门到精通:包管理工具之GOPATH
  6. 一键开启次元世界,AI Studio应用中心上线啦!
  7. Lua + Redis 优惠券领券设计
  8. Qt中LineEdit、TextEdit 、PlainTextEdit三个控件的区别
  9. 哈希值的计算方式及一些相关概念
  10. 微信开源PhxSQL:高可用、强一致的MySQL集群