关于Java的三个小题目(很容易错!)

devtools/2024/11/15 6:04:32/

第一题 char运算后的数据类型

在这里插入图片描述
最后输出的是什么类型?

答案:int

char与byte的联系和区别

  1. char是无符号型的,能够表示一个整数,不能表示负数(0~65535);而byte是有符号型的,能够表示-128—127 的数;
  2. char、byte、int对于英文字符,能够相互转化
java">public static void main(String[] args) {char a = 'a';int aa = 97;System.out.println(a == aa);byte bb = 'b';int cc = 'c';char b = (char)98;char c = (char)99;System.out.println("bb:"+bb);System.out.println("cc:"+cc);System.out.println("b:"+b);System.out.println("c:"+c);}

在这里插入图片描述

  1. char可以表示中文字符,byte不可以。(一个字占2个字节)
    在这里插入图片描述

题目解释

char类型的数据参与运算的时候,已经变成了byte,所以最后打印的一定是一个数字,但是为什么会变成int呢?

要理解这一点,我们需要两个前置小知识

前置小知识1

高级语言不管有多少数据类型,最终运行都要转换为C的6种数据类型
在这里插入图片描述
Java代码最终会变成C代码运行,而C中是没有Java的boolean类型和byte类型的

所以这两种类型,实际在CPU中运行的时候会变成其他类型

那具体会变成什么类型呢?int,原因请看前置知识2

前置知识2

CPU当中高速缓存的基本存储单位是缓存行,一个缓存行64Byte

缓存行通过导线和CPU相连,与CPU交互时要使用高低电压传输0101的bit信号
在这里插入图片描述

因为使用电压传输,电压是一种电势能,就不能同时传输(电势能叠加会抵消),只能排队

所以当一个缓存行中的数据数量越多,读写的时候排队的概率越大排队等待的时间越长

反之,数据数量越少,则拥塞程度越小读写的时候排队的概率越小排队等待的时间越短

所以,小存储的数据类型少用,大存储的数据类型多用,就可以降低排队时间,提高读写速度

Java底层就采用了转化机制,去提高读写速度

Java底层的boolean和byte都使用int类型表示,而不用short或者byte,就是为了提高缓存行的读写速度,所以是4字节

这里用到了一种思想:用空间换时间,操作系统很多时候都用了这种思想

结论

byte参与运算的时候,类型就会变成int

在这里插入图片描述

第二题 位运算

java">    public static void main(String[] args) {int a = -4;int b = 5;System.out.println(a & b);System.out.println(a | b);System.out.println(a ^ b);System.out.println(a << 2);System.out.println(a >> 2);System.out.println(a >>> 2);}

各自输出多少?

答案:
4
-3
-7
-16
-1
1073741823

讲解

计算机底层,数据的存储+运算都是用补码完成的

正数的原码,反码,补码相同

负数的补码 = 反码(符号位不变,其余位按位取反)+1;

在这里插入图片描述

在这里插入图片描述

&运算

只要不是全1(全是true),那么就是0(false)

在这里插入图片描述

|运算

只要有一个是1,就是1;全是0才是0
在这里插入图片描述
算出来是一个负数,我们刚才说了,计算机底层,数据的存储+运算都是用补码完成的

既然是负数,我们需要求它的原码

负数的原码 = (补码-1)+除符号位按位取反

在这里插入图片描述

^运算

异或运算,只要不一样就是1,一样才是0
在这里插入图片描述

算出来依然是一个负数,我们操作同上

在这里插入图片描述

<<运算

逻辑左移,不需要画图运算,因为是低位补零,所以一定是乘以2^n

左移两位,就是乘4,所以结果是-16

>>运算

逻辑右移运算,高位补符号位,也不需要我们画图,一定是除以2^n

右移两位,就是除以4,结果是-1

>>>运算

无符号右移,高位补0,低位舍弃,符号位参与运算,需要画图

>>>运算符将int和long视为32位和64位无符号整数类型,这是Java语言所缺少的。

在这里插入图片描述

将它右移2位,高位补零,就会变成正数
在这里插入图片描述

所以最后的结果是2^30-1 = 1073741823

第三题:字符串常量池

java">    public static void main(String[] args) {String str1 = "hello"; // 字符串常量池String str2 = "he" + new String("llo");// 修改llo的内存空间为helloSystem.out.println(str1 == str2);}

输出结果是?

答案:false

讲解

str1,由于不是new出来的,所以存储在字符串常量池当中;
str2中的llo是new出来的,所以存在在堆当中

Java中的字符串相加,两个字符串只要有一个存储在堆中,拼接之后的最终结果也存储在堆中

在这里插入图片描述
通过关键字new定义:
1. 编译程序先在字符串常量池查找,是否存在"hello"常量。如果不存在,则在字符串常量池开辟一个内存空间,存放"hello";如果存在,则不另外开辟空间,保证字符串常量区只有一个"hello",节省空间。
2. 然后在堆区,开辟一个空间,存放new出来的String对象,并在栈区开辟空间,存放变量名称str1,str1指向堆区new出来的String对象。

直接定义:
1.在字符串常量区查找是否存在"hello"常量,如果不存在,则在字符串常量区开辟一个内存空间,存放"hello";
2.如果存在,则不另外开辟空间;在栈区开辟空间,存放变量名称str2,str2指向字符串常量池"hello"的内存地址。

参考文章:

java的字符串存储在堆中还是常量池中
在这里插入图片描述


http://www.ppmy.cn/devtools/12559.html

相关文章

windows/linux 安装php的 sql server 扩展

Windowsphpstudyphp7.1 下载&#xff1a;ODBC、下载php 的sql server 扩展 路径&#xff1a;下载地址 版本&#xff1a;我的是7.1 对应的ODBC 是13&#xff0c;php 的sql server 扩展为4.3 安装&#xff1a;msodbcsql 直接安装、sqlsrv43 安装完把 扩展复制到php71 的扩展文…

go 这样做就是python

代码 package mainimport "fmt"func main() {var list []interface{}list append(list, 1, 2, 3)list append(list, "d", "d", 3.0)fmt.Println(list, "这是一个万能类型列表,这就是python")dict : map[interface{}]interface{}{&q…

区块链钱包开发——专业区块链开发

随着区块链技术的发展&#xff0c;钱包开发成为了一项至关重要的任务。本文将探讨区块链钱包开发的重要性&#xff0c;分析当前面临的挑战&#xff0c;并展望未来的发展趋势。 一、区块链钱包概述 区块链钱包是一种用于存储和管理数字货币的软件工具。它为用户提供了一个安全的…

Java | Leetcode Java题解之第45题跳跃游戏II

题目&#xff1a; 题解&#xff1a; class Solution {public int jump(int[] nums) {int length nums.length;int end 0;int maxPosition 0; int steps 0;for (int i 0; i < length - 1; i) {maxPosition Math.max(maxPosition, i nums[i]); if (i end) {end maxP…

华硕电脑怎么恢复删除的文件?有5种可以选择的方案

在日常使用华硕电脑的过程中&#xff0c;我们难免会遇到误删重要文件的情况。无论是因为不小心按错了键&#xff0c;还是由于某种软件故障&#xff0c;失去这些文件都可能会给我们带来不小的麻烦。那么&#xff0c;面对这样的情况&#xff0c;我们该如何有效地恢复这些被删除的…

javaweb学习(day13-数据交换和异步请求)

一、JSON 1.介绍 1.1 在线文档 JSon 在线文档&#xff1a;https://www.w3school.com.cn/js/js_json_intro.aspAjax 在线文档&#xff1a;https://www.w3school.com.cn/js/js_ajax_intro.asp 1.2 JSON 介绍 JSON 指的是 JavaScript 对象表示法&#xff08;JavaScript Objec…

数据分析学习资源(未完)

1、PDF 数据分析自学攻略 增长黑客&#xff08;AARRR&#xff09; 量化思维

设计模式- 享元模式(Flyweight Pattern)结构|原理|优缺点|场景|示例

​​​​​​​ 设计模式&#xff08;分类&#xff09; 设计模式&#xff08;六大原则&#xff09; 创建型&#xff08;5种&#xff09; 工厂方法 抽象工厂模式 单例模式 建造者模式 原型模式 结构型&#xff08;7种&…