首页 > 编程语言 >《Java核心技术 I》容易忽视和重要的知识点汇总

《Java核心技术 I》容易忽视和重要的知识点汇总

时间:2024-12-24 12:31:05浏览次数:5  
标签:知识点 Java String 汇总 System Person println public out

本文对《Java核心技术 I》中开发者容易忽视重要的知识点进行总结,不包含一般开发者都知道内容。大标题后括号的数字代表书中对应的章节。

一、Java的基本程序设计结构(3)

1. 整数表示

可以为数字字面量加上下划线,这些下划线只是为了让人更易读。Java编译器会去除这些下划线。

int n = 1_000_000_000;
System.out.println(n);
// 输出
1000000000

2. 无符号类型

Java 中没有原生的无符号整数类型。所有的整数类型(byteshortintlong)都是带符号的。不过,Java 提供了某些方法来模拟无符号行为,特别是对于 intlong 类型。

Java 8 引入的 Integer 类中的 toUnsignedLong(int x)divideUnsigned(int x, int y) 方法主要用于支持无符号整数的操作,尽管 int 类型本身是带符号的。

2.1 toUnsignedLong(int x)

该方法将一个带符号的 int 转换为无符号的 long 类型。由于 int 类型是 32 位,且在 Java 中是有符号的,它的范围是 -2^312^31-1,而无符号 int 的范围是 02^32-1。通过该方法,可以将带符号的 int 值转换为无符号的 long 值来处理。

int signedInt = -1;  									// 带符号的 int 值
long unsignedLong = Integer.toUnsignedLong(signedInt);  // 转换为无符号 long
System.out.println(unsignedLong);  						// 输出:4294967295
// -1 二进制是 11111111 11111111 11111111 11111111,转成无符号就是把前面二进制直接当成原码,求值为2^32-1即4294967295
// 正常负数的值应该是 上面二进制的各个位取反最后+1
2.2 divideUnsigned(int x, int y)

该方法执行两个无符号 int 值的除法操作,并返回无符号的结果。它的作用类似于普通的 x / y,但是它是以无符号的方式来处理运算,即忽略符号位。

int x = 10;
int y = 3;
int result = Integer.divideUnsigned(x, y);  // 无符号除法
System.out.println(result);  // 输出:3
2.3 remainderUnsigned(int x, int y)

这个方法与 divideUnsigned 类似,但是它返回的是无符号的余数。

int x = 10;
int y = 3;
int remainder = Integer.remainderUnsigned(x, y);  // 无符号余数
System.out.println(remainder);  // 输出:1

无符号数的加减乘法在二进制层面与有符号数一致,因为它们使用相同的二进制表示,只是解释方式不同。所以加减乘法可以直接使用。

3. double 类型

float 类型的数值有一个后缀 F 或 f(例如,3.14F)。没有后缀 F 的浮点数值(如3.14)总是默认为 double 类型。可选地,也可以在double数值后面添加后缀 D 或 d。

所有浮点数计算都遵循 IEEE 754 规范,具体来说,有3个特殊的浮点数值表示溢出和出错的情况。

  1. 正无穷大(POSITIVE_INFINITY)
  2. 负无穷(NEGATIVE_INFINITY)
  3. NaN(不是一个数)

例如,一个正整数除以0的结果为正无穷大,计算0/0或负数的平方根结果为NaN。

Double x = 1.0;
if (x != Double.POSITIVE_INFINITY) {
    System.out.println("x is not POSITIVE_INFINITY");
}

4. 右移操作

>>>>> 都是按照位模式右移的运算符,但有略微区别。

  1. >> 是带符号的右移操作符,叫做 算数右移。会保持符号位不变。

  2. >>> 是无符号右移操作符,叫做 逻辑右移。不管正负数,都用 0 填充最高位。

int a = -8; // 二进制:11111111 11111111 11111111 11111000 (补码形式)
int b = a >> 2; // 右移 2 位
System.out.println(b); // 输出:-2

-8 右移两位后是 11111111 11111111 11111111 11111110,负数在计算机中是以补码的形式存储,其原码是各个位取反,再+1。00000000 00000000 00000000 00000001 + 1 = 00000000 00000000 00000000 00000010(原码是2)

int a = -8; // 二进制:11111111 11111111 11111111 11111000 (补码形式)
int b = a >>> 2; // 右移 2 位,高位补 0
System.out.println(b); // 输出:1073741822

-8 右移两位后是 00111111 11111111 11111111 11111110,(1073741822)

5. char类型

UTF-8 和 UTF-16 是两种常用的字符编码方式。

  1. UTF-8是一种可变长度的字符编码,它将 Unicode 字符集中的字符编码成 1 到 4 个字节(8 位),使用 1 个字节到 4 个字节表示一个字符。其中前128个字符(ASCII)采用1字节

  2. UTF-16也是一种可变长度的字符编码方式,但它将 Unicode 字符集中的字符编码成 2 个字节或 4 个字节,并且对于大多数常用字符(前128个字节),使用 2 个字节来表示。

Java中的 char类型 使用的就是 UTF-16,其中 UTF-16 有一个代码单元的概念,即表示一个字符的最小存储单位,UTF-16的代码单元是2字节。

观察下面代码可以发现,charAt 返回的是一个代码单元,那么对于占用两个代码单元的字符串就会出现奇怪的问题。所以尽量避免使用 Char 类型。

String s = "\uD83D\uDE00hello"; // 这个字符串实际是 

标签:知识点,Java,String,汇总,System,Person,println,public,out
From: https://blog.csdn.net/m0_74065705/article/details/144676465

相关文章

  • python web知识点梳理
    目录1、第1章Django概述(1)环境搭建:需要安装django,使用国内镜像(2)创建项目和应用2、第2章路由系统(1)路由工作原理:(2)内置路由转换器(3)路由分发:include函数(4)向视图传递额外参数(5)命名空间①URL命名和reverse解析函数②应用命名空间,app_name属性3、第3章模型(1)定义和使......
  • (2024最新毕设合集)基于SpringBoot的小说在线阅读网咖+86615|可做计算机毕业设计JAVA、P
    目 录摘要1绪论1.1 选题背景1.2研究内容1.3本文的组织结构2相关技术介绍2.1MySQL数据库2.2Java编程语言2.3SpringBoot框架介绍3 系统需求分析与设计3.1可行性分析3.1.1技术可行性分析3.1.2经济可行性分析3.1.3法律可行性分析3.2需......
  • Java 实战项目:Spring Boot + MyBatis Plus + MySQL + Shiro + Thymeleaf 赋能仓库管理
    1.项目概述本仓库管理系统旨在实现对仓库中商品、供应商、客户、员工、权限、日志等信息的有效管理,提升仓库运营效率和管理水平。系统主要功能包括基础数据管理、进货管理、销售管理、库存管理、系统管理等。2.系统架构2.1技术选型后端:SpringBoot+MyBatisPlus+MySQL......
  • Java+Vue 断点续传功能实现
    实现断点续传功能通常涉及前后端的协同工作。前端负责文件的分片上传和状态管理,后端负责接收文件分片并进行合并。下面是一个简单的示例,展示如何使用Java和Vue来实现断点续传功能。前端(Vue)1.安装依赖首先,确保你的Vue项目中安装了axios用于HTTP请求:npminstallaxios2.......
  • Java爬虫:速卖通(AliExpress)商品评论获取指南
    引言在当今的电商时代,商品评论对于消费者决策有着举足轻重的影响。速卖通(AliExpress),作为全球知名的在线零售平台之一,拥有海量的商品评论数据。对于商家而言,能够高效地获取这些评论数据,不仅可以用于市场分析,还能洞察消费者需求,优化商品和服务。本文将介绍如何使用Java编写爬虫......
  • Java项目实战:基于 Spring Boot 的毕业设计双选系统设计与实现
    1.系统概述1.1系统简介毕业设计双选系统旨在实现学生与教师之间毕业设计课题的双向选择过程的信息化管理。该系统能够提高双选效率,优化资源配置,确保毕业设计工作的顺利开展。系统分为学生端、教师端和管理员端,不同角色拥有不同的功能权限,共同完成双选流程。1.2系统架构技术......
  • Java 项目实战:全方位解析基于 Spring Boot、MySQL、FastJSON、MyBatis - Plus、Swagge
    1.引言1.1编写目的本设计文档详细阐述了SNS系统的架构、功能模块、数据结构、接口设计以及系统部署等方面,为系统的开发、测试、维护提供全面的指导,确保项目团队成员对系统有清晰一致的理解,保证系统的顺利实施与迭代优化。1.2适用范围本设计文档适用于SNS系统的开发团队、测试......
  • 31. 说说你平时是怎么处理 Java 异常的
    try-catch-finallytry块负责监控可能出现异常的代码catch块负责捕获可能出现的异常,并进行处理finally块负责清理各种资源,不管是否出现异常都会执行其中try块是必须的,catch和finally至少存在一个标准异常处理流程抛出异常→捕获异常→捕获成功(当catch的异常类型与......
  • 27. java反射的作用于原理
    1、定义:反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意个对象,都能够调用它的任意一个方法。在java中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。2、哪里会用......
  • 26. Java IO与 NIO的区别
    Java中的IO(Input/Output)和NIO(NewInput/Output)是两种不同的处理输入输出流的方式,它们在设计、使用场景和性能上有显著的差异。以下是JavaIO与NIO的主要区别:1.基本概念IO(传统IO):指的是Java中传统的输入输出流,通过java.io包提供的流类(如FileInputStream,FileOutputStream,Buff......