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

news2024/10/7 8:28:34

第一题 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的内存空间为hello
        System.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.coloradmin.cn/o/1618893.html

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

相关文章

AI视频改字个性化祝福豪车装X系统uniapp前端开源源码下载

装X系统源码简介 创意无限&#xff01;AI视频改字祝福&#xff0c;豪车装X系统源码开源&#xff0c;打造个性化祝福视频不再难&#xff01; 想要为你的朋友或家人送上一份特别的祝福&#xff0c;让他们感受到你的真诚与关怀吗&#xff1f;现在&#xff0c; 通过开源的AI视频…

fnm:Rust开发的高效Node版本管理工具

简介 fnm 是一个基于 Rust 开发的 Node 版本管理工具&#xff0c;它的目标是提供一个快速、简单且可靠的方式来管理 Node.js 的不同版本。同时&#xff0c;它是跨平台的&#xff0c;支持 macOS、Linux、Windows。&#x1f680; Fast and simple Node.js version manager, buil…

MySQL创建数据库与表

要求&#xff1a; 1.在本机安装数据库 2.创建一个数据库db_classes 3.创建一行表db_hero 4.将四大名著中的常见人物插入这个英雄表 目录 要求&#xff1a; 过程&#xff1a; 结果&#xff1a; 命令总结&#xff1a; 过程&#xff1a; 1.安装数据库 http://t.csdnimg…

android openGL ES详解

1、渲染线程与主线程的通信 两个线程之间的通信可以用如下方法: 在主线程中的 GLSurfaceView 实例可以调用 queueEvent( &#xff09;方法传递一个 Runnable 给后台渲染线程&#xff0c;渲染线程可以调用 Activity 的 runOnUIThread()来传递事件 (event) 给主线程。 2、顶点…

2024年深圳杯东三省数学建模联赛A题论文首发第二种思路

深圳杯A题论文代码分享资料链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1L2NVgoefSW-yuqZjEB3wcw 提取码&#xff1a;sxjm 问题一 数据转换&#xff1a; 首先&#xff0c;我们将监测站的经纬度坐标转换为基于米的笛卡尔坐标系。这是因为在地面上的大尺度距离…

高级数据结构—线段树(一)

学线段树的原因是因为cf的一道题目始终想不出来怎么优化&#xff0c;后来知道区间查询和修改要用到线段树。。。 原题&#xff1a;Iva & Pav 线段树的作用 区间最值查询&#xff1a;可以高效地找到给定区间内的最大值、最小值等。 区间和查询&#xff1a;可以高效地计算…

小程序AI智能名片S2B2C商城系统:解锁内容深耕新境界,助力品牌企业高效定制内容策略

在数字化时代&#xff0c;内容营销已成为品牌企业获取市场份额、增强用户黏性的关键武器。然而&#xff0c;面对海量的互联网信息和复杂多样的社交媒体平台&#xff0c;如何有效地深耕内容&#xff0c;成为众多品牌企业面临的难题。 传统的内容分类与识别方式&#xff0c;往往依…

信息系统项目管理师0066:过程管理(5信息系统工程—5.1软件工程—5.1.6过程管理)

点击查看专栏目录 文章目录 5.1.6过程管理1.成熟度模型2.成熟度等级5.1.6过程管理 软件过程能力是组织基于软件过程、技术、资源和人员能力达成业务目标的综合能力。包括治理能力、开发与交付能力、管理与支持能力、组织管理能力等方面。软件过程能力成熟度是指组织在提升软件产…

明日方舟游戏助手:一键完成日常任务 | 开源日报 No.233

MaaAssistantArknights/MaaAssistantArknights Stars: 11.6k License: AGPL-3.0 MaaAssistantArknights 是一款《明日方舟》游戏的小助手&#xff0c;基于图像识别技术&#xff0c;支持一键完成全部日常任务。 刷理智、掉落识别及上传企鹅物流智能基建换班、自动计算干员效率…

Day 20 Linux的WEB服务——apache

WEB服务简介 目前主流的web服务器软件 Linux&#xff1a;apache &#xff0c; nginx Windows-server&#xff1a;IIS 服务器安装nginx或apache后&#xff0c;叫做web服务器&#xff08;又称WWW服务器&#xff09; web服务器软件属于C/S框架模型 web服务器是一种被动程序只…

jmeter之连接MySQL数据库

jmeter连接mysql数据库 mysql官网下载地址&#xff1a;MySQL :: Download Connector/J 步骤如下&#xff1a; 1、下载mysql的jar包放入到jmeter的lib/ext下&#xff0c;然后重启jmeter 链接: https://pan.baidu.com/s/1rRrMQKnEuKz8zOUfMdMHFg?pwdawfc 提取码: awfc 2、配置…

如何解决升级IntelliJ IDEA 2024后 打开项目就自动闪退关闭问题的终极指南

title: “&#x1f42f; 解决升级IntelliJ IDEA 2024后项目自动关闭的终极指南” date: 2024-04-23 author: 猫头虎 profile: CSDN 文章目录 title: "&#x1f42f; 解决升级IntelliJ IDEA 2024后项目自动关闭的终极指南" date: 2024-04-23 author: 猫头虎 profile: …

STM32点灯大师(中断法)

一、使用CubeMX配置 新增加了RCC进行配置 二、代码 需要重写虚函数&#xff0c;给自己引用

2024深圳杯数学建模挑战赛B题:批量工件并行切割下料问题思路代码成品论文分析

更新完整代码和成品完整论文 《2024深圳杯&东三省数学建模思路代码成品论文》↓↓↓ https://www.yuque.com/u42168770/qv6z0d/zx70edxvbv7rheu7?singleDoc# 问题重述 深圳杯数学建模挑战赛2024B题&#xff1a;批量工件并行切割下料问题 板材切割下料是工程机械领域重要…

盲人过马路安全:科技力量赋予“隐形守护者”

作为一名资深记者&#xff0c;我始终关注着社会各群体的生活现状&#xff0c;尤其是那些面临特殊挑战的人群。今天&#xff0c;我想聚焦一个看似平常却对盲人构成重大困扰的日常场景——过马路&#xff0c;以及一款名为蝙蝠避障的辅助应用如何成为他们的盲人过马路安全的守护者…

springboot的坑

问题&#xff1a;使用Autowired注入一个service&#xff0c;然后写了两个接口&#xff0c;第一个接口与请求时显示注入的service为空一直报错&#xff0c;但是第二个接口请求时service竟然不是空&#xff1f;在这里插入图片描述 凶手找到了&#xff0c;是private修饰。果然没仔…

CDN、边缘计算与云计算:构建现代网络的核心技术

在数字化时代&#xff0c;数据的快速传输和处理是保持竞争力的关键。内容分发网络&#xff08;CDN&#xff09;、边缘计算和云计算共同构成了现代互联网基础架构的核心&#xff0c;使内容快速、安全地到达用户手中。本文将探讨这三种技术的功能、相互关系以及未来的发展趋势。 …

网络 (基础概念, OSI 七层模型, TCP/IP 五层模型)

网络互连 网络互连: 将多台计算机连接在一起, 完成数据共享 数据共享的本质是网络数据传输, 即计算机之间通过网络来传输数, 也叫做网络通信 根据网络互连的规模不同, 将网络划分为局域网和广域网 注意: 局域网和广域网是相对的概念 局域网LAN 又称内网, 局域网和局域网之间在没…

CCS项目持续集成

​ 因工作需要&#xff0c;用户提出希望可以做ccs项目的持续集成&#xff0c;及代码提交后能够自动编译并提交到svn。调研过jenkins之后发现重新手写更有性价比&#xff0c;所以肝了几晚终于搞出来了&#xff0c;现在分享出来。 ​ 先交代背景&#xff1a; 1. 代码分两部分&am…

谷粒商城实战(017 业务-单点登录)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第231p-第p235的内容 介绍 单点登录&#xff08;Single Sign-On&#xff0c;SSO&#xff09;是一种身份验证服务&#xff0c;允许用户使用一组凭…