牛客网Java错题总结(6)

目录

一、boolean类型占字节数

二、访问权限修饰符

三、正则表达式

四、逻辑运算符


一、boolean类型占字节数

解析:

bool类型所占字节数主要有以下三种说法:

  • 1个bit(1/8个字节)
    • 理由:boolean类型的值只有true和false两种逻辑值,在编译后会使用1和0来表示,这两个数在内存中按位算,仅需1位(bit)即可存储,位是计算机最小的存储单位。在传智播客java基础班中也有有此理由(复习时所参考的视频)。
  • 1个字节
    • 理由:虽然编译后1和0只需占用1位空间,但计算机处理数据的最小单位是1个字节,1个字节等于8位,实际存储的空间是:用1个字节的最低位存储,其他7位用0填补,如果值是true的话则存储的二进制为:0000 0001,如果是false的话则存储的二进制为:0000 0000。
  • 4个字节
    • 理由:在《Java虚拟机规范》一书中的描述:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。也就是说JVM规范指出boolean当做int处理,也就是4字节,boolean数组当做byte数组处理,这样我们可以得出boolean类型占了单独使用是4个字节,在数组中是确定的1个字节。
    • 如果认同第三条,那么存在问题:那虚拟机为什么要用int来代替boolean呢?为什么不用byte或short,这样不是更节省内存空间吗。经过查阅资料发现,使用int的原因是,对于当下32位的处理器(CPU)来说,一次处理数据是32位(这里不是指的是32/64位系统,而是指CPU硬件层面),32 位 CPU 使用 4 个字节是最为节省的,哪怕你是 1 个 bit 他也是占用 4 个字节。因为 CPU 寻址系统只能 32 位 32 位地寻址,具有高效存取的特点。

参考地址:https://blog.csdn.net/dhaibo1986/article/details/108500514

结论:boolean在oracle的jvm中,至少在HotSpot1.8中,boolean变量的长度为4Byte。而boolean数组中,每个boolean长度为1Byte

二、访问权限修饰符

解析:

  • A:对于外部类而言,它也可以使用访问控制符修饰,但外部类只能有两种访问控制级别: public 和默认。因为外部类没有处于任何类的内部,也就没有其所在类的内部、所在类的子类两个范围,因此 private 和 protected 访问控制符对外部类没有意义。
  • B:内部类的上一级程序单元是外部类,它具有 4 个作用域:同一个类( private )、同一个包( protected )和任何位置( public )。
  • C:因为局部成员的作用域是所在方法,其他程序单元永远不可能访问另一个方法中的局部变量,所以所有的局部成员都不能使用访问控制修饰符修饰

三、正则表达式

解析:

  • A:[a-z]表示匹配a-z中的任何一个字符,[a-z]+ 表示一次或多次匹配前面的字符或子表达式,
  • B:[://] 表示匹配 :// 中的任何一个字符,也就是匹配 : 或 / ,不能同时匹配 ://
  • C:[htps] 表示匹配 htps 中的任何一个字符,[htps]+ 表示一次或多次匹配前面的字符或子表达式,所以 [htps]+ 可以匹配 https
  • D:[a-zA-Z.:/]表示匹配a-z、A-Z、. 、: 、/ 中的任意字符,+代表匹配多次

四、逻辑运算符

解析:

短路和非短路逻辑运算符

  • | 和 & 是非短路逻辑运算符,不管怎么样,两边都执行;
  • || 和 && 是短路逻辑运算符
    • || 运算符左边为true,则右边不执行,如果左边为false,才执行右边;
    • && 运算符左边为false的话,右边就不执行了,如果左边为true,才执行右边。

记忆方法:两个符号的比一个符号的功能更加强大,可以”偷懒“短路,从而减少代码的运算量

猜你喜欢

转载自blog.csdn.net/weixin_39478524/article/details/115063387