第二章 数据类型与运算符

2.1  Java类型系统
基本数据类型(Primitive Data Types)
  1. 整型(Integer Types):用于表示整数值,包括 byteshortint 和 long
  2. 浮点型(Floating-Point Types):用于表示带小数部分的数值,包括 float 和 double
  3. 字符型(Character Type):用于表示单个字符,使用 char 类型。
  4. 布尔型(Boolean Type):用于表示逻辑值,只有两个取值:true 和 false
引用数据类型(Reference Data Types)
  1. 类(Class):由开发人员定义的数据类型,用于创建对象。
  2. 接口(Interface):描述类应该具有的方法而不提供实现,用于实现多态和组织代码结构。
  3. 数组(Array):用于存储相同类型的多个元素,例如 int[]String[] 等。
  4. 枚举(Enumeration):一种特殊的数据类型,用于定义一组常量。
2.2  标识符、关键字和变量

Java标识符、关键字和变量是Java编程语言中的基础概念。以下是关于它们的详细解释:

  1. 标识符 (Identifiers)

    • 标识符是用于识别变量、类、方法等的名称。
    • 标识符必须以字母(a-z, A-Z)、美元符号($)或下划线(_)开始。
    • 之后的字符可以是字母、数字、美元符号($)或下划线(_)。
    • 标识符是大小写敏感的,因此 myVar 和 myvar 是两个不同的标识符。
    • 标识符不能是Java的保留关键字。例如,不能使用 classpublicint 等作为标识符。
  2. 关键字 (Keywords)

    • 关键字是Java语言中具有特殊含义的保留字。它们不能被用作标识符。
    • Java有50个关键字,如 classpublicstaticvoidintifelsewhilefor 等。
    • 关键字用于执行特定的操作或表示特定的编程概念。
  3. 变量 (Variables)

    • 变量是存储数据值的地方。它们有名称(即标识符)和数据类型。
      • 在Java中,变量的声明包括数据类型、变量名和(可选的)初始化值。例如:int myNumber = 10;
    • 变量可以在程序的多个地方访问和修改,直到它们超出作用域。
    • 根据变量的作用域,它们可以分为局部变量、实例变量、类变量(静态变量)等。

一个简单的Java程序示例,展示了标识符、关键字和变量的使用:

public class HelloWorld { // 'public' 和 'class' 是关键字, 'HelloWorld' 是标识符
public static void main(String[] args) { // 'public', 'static', 'void' 和 'main' 是关键字
String greeting = "Hello, World!"; // 'String' 是关键字, 'greeting' 是标识符, "Hello, World!" 是字符串字面量
System.out.println(greeting); // 'System', 'out', 'println' 是关键字
}
}

        在这个示例中,HelloWorld 是一个类名(标识符),public class 和 public static void main 是关键字的使用,而 greeting 是一个变量(标识符),其数据类型为 String(关键字)。

2.3  字面符和字符串

在Java中,字面符(Literals)和字符串(Strings)是两种不同类型的表示数据的方式。

字面符(Literals)

字面符是用来表示固定值的符号。Java支持以下几种类型的字面符:

  1. 整数字面符:用来表示整数值,如 123-4560xABC(十六进制)等。

  2. 浮点数字面符:用来表示浮点数值,如 3.14-2.718281.618e-1(科学记数法)等。

  3. 字符字面符:用来表示单个字符,用单引号括起来,如 'a''1''\n'(换行符)等。特殊字符可以使用转义序列表示,如 '\t'(制表符)或 '\''(单引号字符)。

  4. 布尔字面符:只有两个,true 和 false,用来表示逻辑值。

  5. 字符串字面符:用来表示一串字符,用双引号括起来,如 "Hello, World!"。字符串字面符实际上是字符串对象的简写形式。

  6. 空字面符:对于引用类型(如对象、数组),可以使用 null 字面符来表示没有引用任何对象的状态。

字符串(Strings)

字符串在Java中是不可变的(immutable)对象,它们由String类表示。字符串字面符(如 "Hello, World!")实际上是String类的一个实例。

你可以通过以下几种方式创建字符串:

  • 使用字符串字面符:

    String s1 = "Hello";
  • 使用new关键字和String类的构造器:

    String s2 = new String("Hello");
  • 使用StringBuilderStringBuffer类构建字符串:

    StringBuilder sb = new StringBuilder();
    sb.append("Hello");
    String s3 = sb.toString();

字符串在Java中有很多有用的方法和操作,比如连接(concatenation)、比较(comparison)、查找(search)、替换(replacement)等。

需要注意的是,字符串字面符创建的字符串和通过new关键字创建的字符串对象在内存中的表现是不同的。字符串字面符创建的字符串会被Java虚拟机(JVM)存储在字符串常量池中,以优化性能和内存使用。而通过new关键字创建的字符串对象则会在堆内存中分配空间。

示例:

String s1 = "Hello"; // 字符串字面符,可能存储在字符串常量池中
String s2 = new String("Hello"); // 通过构造器创建,一定在堆内存中分配空间
// 下面的比较将返回false,因为s1和s2虽然内容相同,但它们是不同的对象
System.out.println(s1 == s2); // false
// 下面的比较将返回true,因为它们的内容相同
System.out.println(s1.equals(s2)); // true
2.5  数据类型的转换

        在Java中,数据类型转换是一个常见的操作,它允许开发者将一个数据类型的值转换为另一个数据类型。Java提供了两种类型转换:自动类型转换(也称为隐式类型转换)和强制类型转换(也称为显式类型转换)。

自动类型转换(隐式类型转换)

        自动类型转换发生在不同数据类型之间的转换是安全的,并且不会丢失信息时。例如,将一个较小的数据类型(如byteshortchar)转换为一个较大的数据类型(如intlongfloatdouble)时,Java会自动执行这种转换。

byte b = 45;
int i = b; // 隐式转换,将byte类型的b转换为int类型

强制类型转换(显式类型转换)

强制类型转换发生在两种情况下:

  1. 将一个较大的数据类型转换为一个较小的数据类型,并且可能会丢失信息。
  2. 将一个非数值类型转换为数值类型,或者将一个数值类型转换为非数值类型。

        在进行强制类型转换时,Java要求开发者明确指定转换的类型,并且开发者需要确保转换是安全的,因为强制类型转换可能会导致数据丢失或溢出.

double d = 123.456;
int i = (int) d; // 显式转换,将double类型的d转换为int类型,结果将是123

// 强制类型转换可能会导致数据丢失
float f = 123.456f;
int truncated = (int) f; // 结果将是123,小数部分被截断

// 强制类型转换还可能导致溢出
byte b = 127; // byte的最大值是127
b = (byte) 255; // 这将导致溢出,b的值将变成-1

        在进行强制类型转换时,建议使用类型转换运算符 () 来明确转换的目标类型,以避免编译器警告或错误。

        此外,还有一种特殊的类型转换是字符串与数值类型之间的转换。这通常涉及到使用String类的parseInt()parseLong()parseFloat()parseDouble()等方法,以及Integer.toString()Double.toString()等方法.

int num = Integer.parseInt("123"); // 将字符串转换为int
String str = Integer.toString(123); // 将int转换为字符串

        在进行数据类型转换时,开发者需要确保转换是合理和安全的,以避免数据丢失或程序错误。

2.6  运算符机优先级

在 Java 中,各种运算符具有不同的优先级,优先级高的运算符会在优先级低的运算符之前进行计算。这样的规则称为运算符优先级。以下是 Java 中常见运算符的优先级,按照优先级从高到低排列:

  1. 一元运算符(++, --, +, -, !):最高优先级
  2. 乘法和除法运算符(*,/,%):高于加法和减法运算符
  3. 加法和减法运算符(+,-)
  4. 移位运算符(<<,>>,>>>)
  5. 关系运算符(>,<,>=,<=,==,!=)
  6. 逻辑运算符(&&,||)
  7. 三元条件运算符(? :)
  8. 赋值运算符(=,+=,-=,*=,/=,%=)
  9. 逗号运算符(,):最低优先级

在实际编写代码时,可以使用括号来改变运算符的优先级,确保表达式按照预期顺序计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值