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

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

时间:2024-12-30 22:19:10浏览次数:6  
标签:知识点 Java String 汇总 System class 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,class,println,public,out
From: https://www.cnblogs.com/xxctx/p/18642584

相关文章

  • Java Web学生自习管理系统
    一、项目背景与需求分析随着网络技术的不断发展和学校规模的扩大,学生自习管理系统的需求日益增加。传统的自习管理方式存在效率低下、资源浪费等问题,因此,开发一个智能化的学生自习管理系统显得尤为重要。该系统旨在提高自习室的利用率和管理效率,为学生提供方便快捷的自习预约服务......
  • Java 项目、模块、包
    1.IntelliJIDEA项目结构工程是顶级结构单元,在一个工程下可以创建多个模块,不同模块之间存在依赖关系,一个模块可以创建多个包,一个包可以创建多个类project(工程)-->module(模块)-->package(包)-->class(类)1.1创建项目File-->New-->Project,创建一个名为Java_Proj......
  • Java难绷知识04——异常处理中的finally块
    Java难绷知识04——异常处理中的finally块前情提要:该文章是个人花的时间最长,查询资料最多,可能是有关finally块的最长文章,希望大家能看下去一些前言在Java中,异常处理机制是程序设计中至关重要的一部分。它允许程序员在程序运行时捕获并处理错误,防止程序因为异常情况而突然崩溃。......
  • 基于Java的网络音乐系统的设计与实现
             摘 要互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对音乐信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用网络音乐系......
  • 【Java编程】JDBC 底层原理
    概述JDBC(JavaDataBaseConnectivity)是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够执行SQL语句。JDBC由一组用Java语言编写的类和接口组成。各种不同类型的数据库都有相应的实现,注意:本文中的代码都是针对MySQL数据库实现的。先看一个案例:publicclassJdbcDemo{......
  • 解锁 Java 解释器模式:赋予程序理解 “新语言” 的魔力
    解锁Java解释器模式:赋予程序理解“新语言”的魔力在Java编程的广袤天地中,我们时常面临需要处理自定义规则、语法或逻辑表达式的场景。此时,解释器模式(InterpreterPattern)宛如一位神奇的翻译官,能够将这些看似晦涩难懂的“新语言”,转化为计算机能够理解并执行的指令,为......
  • 揭秘 Java 中介者模式:解耦复杂交互的神奇钥匙
    揭秘Java中介者模式:解耦复杂交互的神奇钥匙在Java开发的浩瀚天地里,随着系统复杂度的与日俱增,对象之间的交互常常变得错综复杂,宛如一团乱麻。此时,中介者模式(MediatorPattern)宛如一位智慧的协调大师,挺身而出,为我们理清理顺这些复杂的关系,打造更为优雅、易于维护的代码架......
  • 深入理解 Java 模板模式:代码复用与架构优化的利器
    深入理解Java模板模式:代码复用与架构优化的利器在Java编程世界中,设计模式如同智慧的结晶,帮助开发者应对各种复杂的软件开发需求。其中,模板模式(TemplatePattern)以其独特的代码复用和流程标准化能力,成为构建灵活且可维护系统的关键工具。今天,让我们一同深入探究Java中......
  • [2579]基于JAVA的粮油进销存智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的粮油进销存智慧管理系统的设计与实现指导老师(一)选题的背景和意义随着信息技术的快速发展,越来越多的企业开始采用信息管理系统来提升其业务运营效率。粮油行业作为我国国民经济的重要组成部分,其运营管理的高效性和......
  • [2570]基于JAVA的箱包进销存智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的箱包进销存智慧管理系统的设计与实现指导老师(一)选题的背景和意义一、选题背景随着信息技术的飞速发展,各行各业都开始尝试利用计算机技术和信息管理系统来提高工作效率和管理质量。箱包行业作为日常生活中的重要......