我的Thinking in Java学习笔记(四) (zt)

SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档) 本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。 阅读详情
   逻辑运算符
     逻辑运算符 AND(&&)?? OR(||)? NOT(!)? 都会得到一个boolean值,且他们只能用于boolean身上。逻辑表达式中的boolean无法使用类似于c/c++中的数值代替。注意,boolean被用于一个预期会出现string的地方,其值会自动转换为适当的文本形式,并且假如2个比较的基本数据类型不相同,也是可以比较的~例如10和10.0d,结果也是会返回true的
     短路式的核定
     这个的意思就是逻辑表达式中的部分语句可能因为逻辑运算符的使用不当,导致有些语句并没有经过判断,只要大家细心点,掌握知识牢靠就没什么问题~
   
位运算符
    位运算符可以让你操作整数基本数据类型中的个别bit位,切记是整数基本数据类型!位运算符直接造作的是数据中的0和1,直接面向硬件,所以有的人说java无法控制底层硬件,这个说法是不正确的,你完全可以直接控制硬件~好象asm一样~
    位运算符
    AND(&)会在2个输入位全为1时,产生一个输出位1,否则为0;
    OR(|)会在2个输入位有任意一个为1时,产生一个输出位1,当2个输入位全部为0时,输出0;
    XOR(^)会在2个输入位上有且只有一个输入位为1时,产生输出位1;
    NOT(~)也叫做"一的补数运算符",是一个一元运算符(其他的是2元预算符),他仅仅接受一个引数,并且产生相反位
    注意,位运算符和逻辑运算符很想。但是他们是有区别的,我曾经见过一个招聘题目,其中就有让你阐述他们的区别,除了’~‘之外,任何一个位运算符都可以和赋值运算符=号合用,类似于+=
    boolean,你可以在他身上执行除了not之外的任何一个位运算符;对于boolean而言,位运算符和逻辑运算符的唯一区别就是位运算符不做短路式,最后boolean是无法做位移运算的
   位移运算符
     位移运算符也是用来操作位的,也是只能作用在整数基本数据类型上在java中采用补码表示二进制数,在补码表示中,最高为为符号位,正数符号位是0,负数符号位是1,补码的规定如下:
      对于正数来说,最高位是0,其余各位代表数值本身的二进制数;
      对于负数来说,把该数的绝对值的补码按位取反,然后对整个数+1,取得该数的补码。如-1的补码为11111111,-1的绝对值补码是00000001,按位取反11111110,再加1,11111111
     ?左移运算符(<<)会左操作数向左迁移,迁移的位数由右操作数决定(左移后,低位补0)a=a<<2,使a的各个二进制位左移2位,右补0,若a=00001111则a<<2=00111100,高位左移后溢出的位舍弃掉了在不产生溢出的情况下,左移一位相当于乘2,用这种方法来实现乘法,要比乘法运算快很多,所以有的公司在效率题目上,会出这样的题。
     右移运算符(>>)会使左操作数向左迁移,迁移的位数由右操作数决定,面对带有正伏负号的迁移,右移运算符先会采用一种叫符号扩展的措施:如果原值为正数,高位补0;如果原值为负数,则高位补1。
     此外,java中还增加了无正负号的右移运算符(>>>)采用的是零扩展措施:无论原值是正还是负。一律在高位补0,如果你操作的位移对象是char 、byte、short 的话,在位移进行的时候,会把他们先提升为int,才进行位移,当然结果也是int的。位移运算中位移的位数,对于int类型的数据来说,只有低位的5个bit位是有用的,对于long来说,只是低位的6个bit位是有用的。
     位移运算符和其他运算符一样,也是可以和=号并用的,但是当在byte和short上进行无正负号的>>>=时候就有问题了,因为他们会先被提升为int,然后右移,再赋值回来,但是当他们赋值回来的时候,超过他们的容量大小的高位会被截去,就会产生很奇怪的数字-1
     public class test
     {
     public static void main(String args[])
     {
      int i=-1;
      long l=-1;
      short s=-1;
      byte b=-1;
      i>>>=10;
      System.out.println(i);//1
      l>>>=10;
      System.out.println(l);//2
      s>>>=10;
      System.out.println(s);//3
      b>>>=10;
      System.out.println(b);//4
      b=-1;
      System.out.println(b>>>10);//4
      }
     }

     答案是?4194303、18014398509481983、-1、-1
     4194303需要注意的是这个答案,因为第4个移位后的结果并没有传回b,所以才能显示正确的答案,这个答案之所以和第一个是一样的,因为b被提升成int b了,所以答案和int i的是一样的!
    if-else 三元运算符
     这个好象是java中唯一的一个3元运算符,呵呵~他的格式是
     boolean-exp?value1: value2
     如果boolean-exp的判断是true 则执行value1,如果为false,则执行value2,这个和if-else语句是一样的~但是他要比
     if-else语句要精练,并且执行的效率要比他高!
     需要注意的是:value2中的语句是要带有;号的,并且不能放进去System,out.println();之类的语句的,我们是用3元运算符要的是他的运算结果值,并不是if-else所能实现的控制程序流程。
    逗号运算符
    在java中,唯一能放;号运算符的地方,就是for循环中,这个我们会在以后讲到应用于string身上的operator+这个问题我在我的"java初学者容易出现的运算符问题"中已经提到了~在java中,假如+号在string之前出现,执行的是运算,而要是在string 后出现,则执行的是字符连接,例如
     
public class test
     {
      public static void main(String args[])
      {
       int x=1,y=2,z=3;
       String s="string";
       System.out.println(x+y+z+s);
       System.out.println(s+x+y+z);
       System.out.println(x+y+s+z);
      }
     }
 显示6string
 string123
 3string3??
    转型运算符
     转型分为2类,自动转换和强制转换,自动转换就是系统自动进行的宽化转换,例如byte类型的b +1时,系统会自动把他的byte类型转化为int类型,你可以使用byte b=b+1;看看就知道了,系统就会告诉你possible loss of precision,因为你在加1的时候,b的值已经是int类型了,你也没办法再赋值回b了,系统在比int小的数据类型上进行运算时会把他们的值提升为int,而在和long运算时会提升为long,以此类推。所谓的强制转换,就是你告诉编译器,我知道b是个int类型但是他的表达值并没有超过byte的范围,你就放心的转化吧~也就是这么一句话:b=(byte)(b+1);他就会把int缩小为byte,但是假如你运算完的值大于了原来类型表达范围,但是你还要强制转换,发生了内存溢出,那么溢出的bit位会被抛弃,发生数据丢失现象。java中只允许除了boolean之外的基本数据类型的类型转换,这个要记牢
     
字面常量
      一般而言,当你将某个常量放到程序中,编译器很清楚的知道要将他制成什么类型,但是有的时候为了避免模糊不清,我们就可以为常量搭配一些特殊的字符,来引导编译器的正常判断,在常量值后添加l/L指的是long类型,添加f/F指的是float类型,d/D指的是double类型。而十六进制的表达方法是以0x/0X开头,八进制是以0开头,但是java中不提供二进制的表达方法,你需要注意这几个类型所能表达的十六进制最大值
    
char 0xffff????? byte 0x7f??????? short? 0x7fff?? int? 0x7fffffff
    
java没有sizeof运算符
    再谈优先级
     还是那句话,不清楚的时候加括号~嘿嘿~也不用记那些烦琐的优先级了~
     最后一点:当2个最够大的int相乘时所发生的溢出而导致的异常,java是不会在编译期或者是运行期报告的~这个应该算是他的一个小bug了~
Win11 WSL2 Ubuntu 18.04 ROS Gazebo 图形渲染性能调优:从LLVM到NVIDIA GPU的完整指南 本文详细解决了在Win11 WSL2 Ubuntu 18.04环境中运行ROS Gazebo时图形渲染卡顿的问题。通过诊断默认LLVM软件渲染的瓶颈,指导用户更新Mesa驱动PPA源,并关键性地设置环境变量以强制启用NVIDIA GPU硬件加速,最终显著提升仿真性能与流畅度。 阅读详情

相关推荐

Thinking in Java学习笔记(2)(zt)

打造第一个java程序? 名称的可视性???????? 名称问题有些人觉得不是什么大问题,我开始也觉得那不是个什么大问题,但是当你有一天写了很多的类时,你就发现,名称其实真的很重要,假如你有这么一个类,他需要调用其他几个类, 当这几个被类名相同时,问题就出现了,那么???????? 怎么区分他们,并且使他们的名称不冲突呢?毕竟我们不可能把每个声明过的类的名字一一记住,以便在下次声声明其他名称时,加

A Little Bit More...... 917

【机器学习(一)】从零到一:用sklearn构建你的第一个机器学习项目

本文为机器学习新手提供了一个完整的端到端实战指南。通过使用Python的scikit-learn库,以经典的鸢尾花数据集为例,详细演示了从环境搭建、数据探索、预处理、模型训练与评估,到超参数调优和模型保存的全流程。文章旨在帮助读者快速构建第一个机器学习项目,掌握核心工作流和工程实践。

weixin_29070861的博客 467

我的Thinking in Java学习笔记(六)(zt)

???我个人理解初始化和清理的关系就是吃饭和上厕所,正是有了初始化的对象,我们才能使用清理。但是为什么要清理呢?想象一下一个人光吃不拉,是个什么情况?:)难道我们的程序也要像吃饭一样光产生对象,而不去清理使用完毕的对象?任由我们的对象堆积如山,占用系统资源????以构造函数确保初始化的进行??????什么构造函数?构造函数就是一种特殊的函数,当对象产生时,他会被系统自动的调用起来,并且这个函数名称

A Little Bit More...... 1021

LangChain开发避坑指南:为什么Pylance总提示‘无法解析导入‘?实测7种修复方案

本文深入解析了在VS Code中使用LangChain开发时,Pylance频繁提示‘无法解析导入’的根本原因——Python解释器与语言服务器的环境路径不一致。文章提供了从基础排查到深度配置的7种实测修复方案,包括切换解释器、配置extraPaths、使用pyrightconfig.json等,旨在帮助开发者彻底解决此问题,提升AI应用开发效率。

weixin_28826521的博客 444

RDP Wrapper失效了?别慌!教你如何手动为Windows 10/11最新版本添加rdpwrap.ini配置

本文详细介绍了当RDP Wrapper在Windows 10/11最新版本中失效时,如何手动添加rdpwrap.ini配置以恢复多用户远程桌面功能。通过获取最新配置文件、安全替换配置的完整流程以及高级手动配置技巧,帮助用户解决[Not support]问题,确保远程工作流程不受系统更新影响。

weixin_30765577的博客 624

Thinking in Java学习笔记(三)(zt)

?第三章?? 控制程序流程???在java的世界中,对象和数据的处理是通过运算符,而选择和判断则是靠控制语句来实现的???使用java运算符?????运算符的2个用处,1、运算符接受引数,并且产生新值,例如 int a=1+1;2、运算符也可以改变操作数的值 例如 i++;?????大多数的运算符都是可以作用与基本数据类型之上的,但是=、==、!=是例外,他们可以作用于任何对象之上。?????

A Little Bit More...... 895

别再瞎猜了!三角形接法PMSM的相电流到底怎么算?实测线电流转换公式与避坑指南

本文深入解析三角形接法永磁同步电机(PMSM)在FOC控制中的相电流计算误区,提供实测线电流转换公式与避坑指南。针对矢量控制系统中常见的√3换算错误,详细阐述正确的电流重构算法、硬件采样要点及软件优化技巧,帮助工程师实现精确控制并避免电机损坏。

weixin_30367873的博客 466

我的Thinking in Java学习笔记(五) (zt)

  流程控制   java中的流程控制语句有 if-else  whlie  do-whlie  for   switch-case  但是没有提供goto,他在java中是保留字,不是关键字(以后可能会有哦~)   true和false    java中不支持用数字表示boolean值,如果你一定要使用,请先以表达式将他转换为boolean值,例如if(a==0)   if-else    这个

A Little Bit More...... 917

【补充篇】三万字了解AUTOSAR软件架构(一)

主要讲解了AUTOSAR软件架构的分层及各个栈的作用

weixin_47571898的博客 1119

深入探究ASP.NET Core读取Request.Body的正确方式

前言# 相信大家在使用ASP.NET Core进行开发的时候,肯定会涉及到读取Request.Body的场景,毕竟我们大部分的POST请求都是将数据存放到Http的Body当中。因为笔者日常开发所使用的主要也是ASP.NET Core所以笔者也遇到这这种场景,关于本篇文章所套路的内容,来自于在开发过程中我遇到的关于Request.Body的读取问题。在之前的使用的时候,基本上都是借助搜索引擎搜索的答案,并没有太关注这个,发现自己理解的和正确的使用之间存在很大的误区。故有感而发,便写下此文,以作记录。学无止境

萌兔兔MMQ!! 777

我的Thinking in Java学习笔记(七) (zt)

     清理:终结与垃圾回收        这里要明白这么几点        1、垃圾回收器只能回收由new产生的对象,如果你使用或产生了非new产生的对象,垃圾回收器是不知道如何把他清理掉的 。这个时候就要使用到finalize()。        2、垃圾回收器的运做方式是这样的,当垃圾回收器打算开始释放你的对象所占用的资源时,会先调用finalize(),并且在下一次垃圾回收动作放生的时候

A Little Bit More...... 932

【YOLOv8全方位学习手册】第四章 数据增强:从扩充数据到塑造模型的认知边界

"""使用 Albumentations 做自定义增强,兼容 YOLO 格式"""])# 转成 numpy# boxes 必须是 [[x_min,y_min,x_max,y_max], ...]# 在数据加载时调用你可以把集成到 PyTorch 的 Dataset 类里,或使用 Ultralytics 自带的DataLoader。

VectorShift的博客 211

十个最容易翻车的大模型应用坑:我在 0.5B 和 0.8B 上各复现了一遍,一半结论变了

十个最容易翻车的大模型应用坑:我在 0.5B 和 0.8B 上各复现了一遍,一半结论变了 > 盘点系列第 4 篇 · 应用坑复现 【数据说明】本篇全部本机实跑,且跑了两代模型:Qwen3.5-0.8B-Instruct(本机 2026-09 换代后的主力)+ 纯 NumPy CPU 推理引擎,greedy 解码 + 可控温度采样,脚本 top10_ep4_p

hoaxxcj的博客 345

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 284

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 346

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 126

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 197

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 365

【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端

上一篇讲了 MCP 的概念:标准协议、三大角色、M+N 替代 M×N。

nice_lcj520的博客 492

JDK 下载安装:装完 Java 提示「不是内部或外部命令」?环境变量没配

JDK 是写 Java 程序必须装的东西。它包含运行 Java 的虚拟机(JRE)和编译 Java 的编译器(javac)——装了它,能跑、.java文件能编译成可执行程序。免费,学习和小规模生产都不花钱。

科小怪的博客 631

java框架大全

java框架大全

qq_39326137的博客 183

Java 多态 学习笔记

多态是面向对象编程的重要特性,指同一操作作用于不同对象时产生不同行为。其核心在于“父类引用指向子类对象”,结合方法重写实现运行时动态绑定。多态使代码更灵活、可扩展,如用Person p = new Student();统一处理各类人员注册,无需修改调用逻辑。但多态无法直接调用子类特有方法,需通过instanceof判断并强制转换。编译时看左边(类型),运行时看右边(实际对象),实现解耦与维护便利。

AA_AA114514的博客 359

SecureRandom做随机源,这个Java随机字符串工具类有3个方法

本文分享一款JDK17环境下的Java随机字符串工具类,内置3个开箱即用的方法,全部采用SecureRandom加密安全随机源,不存在弱随机、可预测、取模偏差等问题。工具类支持默认62字符集随机串、纯数字随机串、自定义字符集随机串三种生成模式,支持Unicode码点级别的字符集处理,兼容Emoji等增补字符,边界处理严格,异常信息明确,适合验证码、邀请码、盐值、随机口令、短链码等场景,源码可直接复制使用。

Java后端 | AI智能体应用实战派 | 电脑技能行家 298

IDEA 简介:从零认识 IntelliJ IDEA

IDEA 全称,是由 JetBrains 公司开发的一款主流 Java 集成开发环境(IDE)。它集代码编辑、编译、调试、测试、版本控制、构建管理等功能于一体,被大量 Java 开发者视为日常开发的首选工具。所谓 IDE(Integrated Development Environment,集成开发环境),就是把写代码所需的各类工具整合到同一个界面中。相比只用文本编辑器加命令行编译,IDE 能显著减少重复操作,让开发者把精力集中在业务逻辑上。

ztI10的博客 148

Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

【代码】Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

m0_64476639的博客 328

TRingBuffer两端都能增删(快递站版)

TRingBuffer 是一个支持两端增删、下标访问且容量动态增长的环形双端队列。它通过无符号索引的永不归零设计,利用减法自动模运算实现空满判断与元素计数,避免了传统环形缓冲浪费格子的问题。内部以票号(索引)标记首尾,扩容时重排元素为连续存储,保证 O(1) 操作与高缓存效率。虽不线程安全,但其高效性使其成为游戏开发中事件队列、命令缓冲等场景的理想选择。

u013768914的博客 224
上一篇: Thinking in Java学习笔记(三)(zt)
下一篇: 我的Thinking in Java学习笔记(五) (zt)
PerseusYan
博客等级 码龄23年 0粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值