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

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

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

答案:int

char与byte的联系和区别

  1. char是无符号型的,能够表示一个整数,不能表示负数(0~65535);而byte是有符号型的,能够表示-128—127 的数;
  2. char、byte、int对于英文字符,能够相互转化
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

在这里插入图片描述

第二题 位运算

    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

第三题:字符串常量池

    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://xiahunao.cn/news/2981319.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

航空业微服务架构中台的构建与实践

随着航空业的快速发展&#xff0c;航空公司需要面对更加复杂的业务环境和客户需求。在这样的背景下&#xff0c;构建一个稳健、高效的微服务架构中台成为了航空公司的当务之急。本文将探讨航空业微服务架构中台的设计理念、关键技术以及实践经验&#xff0c;帮助航空公司构建具…

Jina Reranker 新模型发布,更小、更快、更便宜!

在传统文本搜索技术已经相对成熟的背景下&#xff0c;如何进一步提高搜索的效率和速度成为了新的追求目标。应对这一挑战&#xff0c;Jina Reranker 模型系列推出了两款针对性能调优的新模型&#xff1a;jina-reranker-v1-turbo-en 和 jina-reranker-v1-tiny-en&#xff0c;它们…

矽塔SA6288Q栅极驱动器,可替代峰绍FD6288Q

SA6288 是一款集成了三个独立半桥栅极驱动器&#xff0c;特别适合于三相电机应用中高速功率MOSFET 和 IGBT 的栅极驱动。可在高达250V 电压下工作。 SA6288内置 VCC 和 VBS 欠压&#xff08; UVLO &#xff09;保护功能&#xff0c;防止功率管在过低的电压下工作&#xff0c;…

赛劲SEJINIGB零背隙滚轮齿条齿圈产品助力高精度运动平台

在高度精密化的工业时代&#xff0c;传统齿轮齿条系统所面临的背隙、摩擦粉尘、润滑等问题愈发凸显&#xff0c;这些问题不仅限制了设备的精度和稳定性&#xff0c;还对生产效率和产品质量造成严重影响。为此&#xff0c;赛劲SEJINIGB经过长期研发和技术积累&#xff0c;推出了…

springboot论文格式系统

采用springbootmysqlhtmlvue技术 详细运行视频地址B站运行效果视频地址 &#xff08;1&#xff09;系统具备用户管理功能&#xff0c;包括用户注册、登录、权限管理等功能。 &#xff08;2&#xff09;系统具备格式规范管理功能&#xff0c;包括格式规范创建、编辑、删除等操…

两天速通阿里

感觉这一周太梦幻了&#xff0c;就像一个梦&#xff0c;很不真实~~~ 感觉这个暑期&#xff0c;我的运气占了99成&#xff0c;实力只有百分之一 4.15上午 腾讯csig 腾讯云部门&#xff0c;面完秒进入复试状态 4.16下午 美团优选供应链部门&#xff0c;4.18上午发二面 4.17晚上 阿…

2款摄像头录像软件,满足你的多种要求!

“有没有一款能够录制摄像头视频的软件呀&#xff1f;我计划录制一些生活小窍门和教学视频&#xff0c;想要能清楚地拍到自己的操作过程。但找了好多软件&#xff0c;都不太满意&#xff0c;真心希望大家能给我推荐几款好用的摄像头录像软件&#xff0c;最好能简单易上手的&…

vue2项目升级到vue3经历分享

依据vue官方文档&#xff0c;vue2在2023年12月31日终止维护。因此决定将原来的岁月云记账升级到vue3&#xff0c;预计工作量有点大&#xff0c;于是想着把过程记录下来。 原系统使用的技术栈 "dependencies": {"axios": "^0.21.1","babel-…

js鼠标经过就增加一个open 进行展开 遍历数组,为每个id对应的元素添加事件监听器

js鼠标经过就增加一个open 进行展开 遍历数组&#xff0c;为每个id对应的元素添加事件监听器 {% javascript %}const ids [Details-HeaderMenu-aaaaaa2,Details-HeaderMenu-aaaaaa6, Details-HeaderMenu-aaaaaa4,Details-HeaderSubMenu-1,Details-HeaderSubMenu-2,Details-H…

python基础知识点(蓝桥杯python科目个人复习计划66)

今日复习内容&#xff1a;算法双周赛 第一题&#xff1a;疯狂星期六 题目描述&#xff1a; 麦肯鸡是一家名声在外的汉堡店&#xff0c;他们最近推出了一份名为vivo50的套餐&#xff0c;只需要在门口大声喊出vivo50&#xff0c;就可以获得这个套餐。 现在&#xff0c;请你打…

W801学习笔记十二:掌机进阶V3版本之驱动(PSRAM/SD卡)

本次升级添加了两个模块&#xff0c;现在要把他们驱动起来。 一&#xff1a;PSRAM 使用SDK自带的驱动&#xff0c;我们只需要写一个初始化函数&#xff0c;并在其中添加一些自检代码。 void psram_heap_init(){wm_psram_config(0);//实际使用的psram管脚选择0或者1&#xff…

程序员过了35岁没人要?“这行越老越香”

程序员35岁失业&#xff1f;参加完OceanBase开发者大会&#xff0c;我又悟了&#xff01; 周六参加了OceanBase2024 开发者大会的现场&#xff0c;来之前我其实挺忐忑的&#xff0c;我觉得一个数据库产品的发布会&#xff0c;能有什么新鲜的东西&#xff1f; 踏入酒店的那一刻&…

HORROR SYSTEM

HORROR SYSTEM是一个创新的工具包,允许开发者在Unity3D中创建独特的原创恐怖游戏。 HORROR SYSTEM是一款强大而灵活的工具,旨在基于Unity3D引擎创建沉浸式第三人称恐怖游戏。 这项资产易于使用且直观,可以让任何经验水平的开发人员将他们的想法付诸实践,创造出高质量、充满…

Git 保姆级教程(一):Git 基础

一、获取 Git 仓库 通常有两种获取 Git 项目仓库的方式&#xff1a; 1. 将尚未进行版本控制的本地目录转换为 Git 仓库&#xff1b; 2. 从其它服务器克隆 一个已存在的 Git 仓库。 两种方式都会在你的本地机器上得到一个工作就绪的 Git 仓库。 1.1 git init&#xff08;本地…

Linux的学习之路:19、进程信号(1)

摘要 今天这张说一下信号的一部分知识 目录 摘要 一、信号 1、生活角度的信号 2、技术应用角度的信号 3、注意 4、用kill -l命令可以察看系统定义的信号列表 5、信号处理常见方式概览 二、产生信号 1、通过终端按键产生信号 2、调用系统函数向进程发信号 3、由软件…

JAVA toString方法详解

hi&#xff0c;我是程序员王也&#xff0c;一个资深Java开发工程师&#xff0c;平时十分热衷于技术副业变现和各种搞钱项目的程序员~&#xff0c;如果你也是&#xff0c;可以一起交流交流。 今天我们来聊聊Java中toString方法~ toString方法的定义 在Java中&#xff0c;toStri…

boa.conf配置详解

boa的配置文件路径&#xff1a;/etc/boa/boa.conf Port 80 # 监听的端口号&#xff0c;缺省值是80 若80被占用&#xff0c;可修改监听端口为其他未占用端口&#xff08;如&#xff1a;88&#xff09; Listen 192.68.0.5 # 绑定调用的IP地址&#xff0c;一般注释掉&#xff0c;…

人工智能热度攀升市场广阔 业内:人机协同将成发展主流

以下文章来源&#xff1a;央广网 今年以来&#xff0c;人工智能产业热度持续攀升。文生视频软件Sora、文生音乐软件Suno等人工智能应用不断涌现&#xff0c;带给人们冲击的同时&#xff0c;也在影响着千行百业。本报今起推出“聚焦人工智能发展”系列报道&#xff0c;围绕人工智…

【JAVA进阶篇教学】第六篇:Java线程中状态

博主打算从0-1讲解下java进阶篇教学&#xff0c;今天教学第六篇&#xff1a;Java线程中状态。 理解并掌握线程的休眠、停止和挂起等操作是多线程编程中的重要内容。下面我将详细说明这些操作&#xff0c;并提供相应的代码案例。 目录 一、线程休眠&#xff08;Thread Slee…

Hadoop格式化namenode出错

​ 我们在对Hadoop进行格式化时 很有可能会出现以下错误 输入命令&#xff1a;hadoop namenode -format 报错信息&#xff1a;-bash&#xff1a;hadoop&#xff1a;command not found 我们总结的最主要原因有三个 Hadoop的环境变量是否配置 配置以后是否使其生效 vim /e…