数字、字符串和数组

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在 Java 和其他面向对象的编程语言中,对象是相关数据的集合,并附带一组方法。这些方法对对象进行操作,执行计算,有时还会修改对象的数据。在这里,我们将介绍三种简单但重要的 Java 内置对象类型:Number(数字)、String(字符串)和 Array(数组)。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java/BasicSyntaxGroup -.-> java/data_types("Data Types") java/BasicSyntaxGroup -.-> java/for_loop("For Loop") java/StringManipulationGroup -.-> java/strings("Strings") java/StringManipulationGroup -.-> java/stringbuffer_stringbuilder("StringBuffer/StringBuilder") java/DataStructuresGroup -.-> java/arrays("Arrays") java/DataStructuresGroup -.-> java/arrays_methods("Arrays Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/wrapper_classes("Wrapper Classes") java/SystemandDataProcessingGroup -.-> java/math_methods("Math Methods") java/SystemandDataProcessingGroup -.-> java/string_methods("String Methods") subgraph Lab Skills java/data_types -.-> lab-178548{{"数字、字符串和数组"}} java/for_loop -.-> lab-178548{{"数字、字符串和数组"}} java/strings -.-> lab-178548{{"数字、字符串和数组"}} java/stringbuffer_stringbuilder -.-> lab-178548{{"数字、字符串和数组"}} java/arrays -.-> lab-178548{{"数字、字符串和数组"}} java/arrays_methods -.-> lab-178548{{"数字、字符串和数组"}} java/wrapper_classes -.-> lab-178548{{"数字、字符串和数组"}} java/math_methods -.-> lab-178548{{"数字、字符串和数组"}} java/string_methods -.-> lab-178548{{"数字、字符串和数组"}} end

Number

通常,我们使用原始数字类型,例如 byteintdouble 等。然而,有时我们需要使用对象而不是原始数据类型。Java 为原始数据类型提供了包装类(Wrapper Classes),例如 ByteShortLongIntegerDoubleFloat 等。包装对象可以转换回原始数据类型,这个过程称为 拆箱(unboxing)Number 类是 java.lang 包的一部分,关于包的更多内容将在后面讨论。

以下是 Number 类的子类实现的一些常见类方法:

  • xxxValue():将此 Number 对象的值转换为 xxx 数据类型并返回。
  • compareTo():将此 Number 对象与参数进行比较。
  • equals():确定此 Number 对象是否与参数相等。
  • valueOf():返回一个包含指定原始值的 Integer 对象。
  • toString():返回表示指定 intInteger 值的 String 对象。
  • parseInt():此方法用于从某个 String 值中获取原始 int 类型。
  • abs():返回参数的绝对值。
  • ceil():返回大于或等于参数的最小整数,以 double 类型返回。
  • floor():返回小于或等于参数的最大整数,以 double 类型返回。
  • pow():返回第一个参数的第二个参数次幂的值。
  • round():返回最接近参数的长整型或整型值,具体取决于方法的返回类型。

示例:

/home/labex/project/numberTest.java 文件中编写以下代码:

public class numberTest
{
    public static void main(String[] args){
        Integer x = 1;    // 将 int 装箱为 Integer 对象
        x = x + 1;        // 将 Integer 拆箱为 int
        System.out.println(Integer.parseInt("10"));  // 从字符串中解析 int
        System.out.println( "x = " + x);
    }
}

输出:

使用以下命令运行 numberTest.java 文件:

javac /home/labex/project/numberTest.java
java numberTest

查看输出:

10
x = 2

String

字符串是对象,因此你可能会问:“String 对象中包含的数据是什么?” 以及 “我们可以在 String 对象上调用哪些方法?” String 对象的组成部分是字符。并非所有字符都是字母;有些是数字,有些是特殊符号,其余的是其他类别的字符。为简单起见,我们将它们统称为字符。String 类中有许多字符串方法,但我们只会使用其中的一部分。其余的可以在官方网站的文档中查阅。

注意: String 类是不可变的(immutable),因此一旦创建了 String 对象,就无法修改。如果需要频繁修改字符序列,则应使用 StringBufferStringBuilder 类。

以下是 StringStringBufferStringBuilder 类的一些常用方法:

  • char charAt(int index):返回当前字符串缓冲区中由 index 参数指定的字符。
  • void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin):将字符串缓冲区中的字符复制到目标字符数组 dst 中。
  • int indexOf(String str):返回指定子字符串在此字符串中第一次出现的索引。
  • int indexOf(String str, int fromIndex):从指定索引开始,返回指定子字符串在此字符串中第一次出现的索引。
  • int lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现的索引。
  • int lastIndexOf(String str, int fromIndex):从指定索引开始向后搜索,返回指定子字符串在此字符串中最后一次出现的索引。
  • int length():返回此字符串缓冲区的长度(字符数)。
  • String substring(int start):返回一个新的 String,其中包含当前 StringBuffer 中的字符子序列。子字符串从指定索引开始,并延伸到 StringBuffer 的末尾。
  • String substring(int start, int end):返回一个新的 String,其中包含当前 StringBuffer 中的字符子序列。

示例:

/home/labex/project/stringTest.java 文件中编写以下代码:

public class stringTest
{
    public static void main(String[] args){
        String greeting = "Hello world!";
        String hello = new String("Hello !");
        System.out.println("greeting is: "+ greeting);
        System.out.println("hello is: "+ hello);
        System.out.println("length of greeting: " + greeting.length());
        System.out.println("first char of greeting: " + greeting.charAt(0));
        System.out.println("index of 'e' in hello: "+ hello.indexOf('e'));
        System.out.println("substring of greeting: "+ greeting.substring(6));  //substr: world

    }
}

输出:

使用以下命令运行 stringTest.java 文件:

javac /home/labex/project/stringTest.java
java stringTest

查看输出:

greeting is: Hello world!
hello is: Hello !
length of greeting: 12
first char of greeting: H
index of 'e' in hello: 1
substring of greeting: world!

Array

数组结构用于存储数据集合,但通常更有用的方式是将数组视为单一类型的变量集合。与其声明单独的变量,例如 number0number1、...、number99,你可以声明一个数组变量 numbers,并使用 numbers[0]numbers[1]、...、numbers[99] 来表示单独的变量。数组的第一个元素的索引为 0

以下是数组的一些常用方法:

  • public static int binarySearch(Object[] a, Object key):使用二分查找算法在指定数组中搜索指定值。数组在调用此方法之前必须已排序。如果搜索键包含在数组中,则返回其索引;否则返回 (–(插入点 + 1))
  • public static boolean equals(long[] a, long[] a2):如果两个指定的 long 数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中所有对应的元素对都相等,则认为这两个数组相等。此方法也可用于其他原始数据类型(byteshortint 等)。
  • public static void fill(int[] a, int val):将指定的 int 值分配给指定 int 数组的每个元素。此方法也可用于其他原始数据类型(byteshort 等)。
  • public static void sort(Object[] a):根据元素的自然顺序对指定对象数组进行升序排序。此方法也可用于原始数据类型(byteshortint 等)。

示例:

/home/labex/project/arrayTest.java 文件中编写以下代码:

public class arrayTest
{
    public static void main(String[] args){
        // 你可以使用 new 初始化一个空数组。
        String[] nameArray1 = new String[5];
        // 用相同的名称 "abc" 填充空数组 nameArray1
        java.util.Arrays.fill(nameArray1,"abc");
        // 也可以使用 for 循环遍历数组
        for (String name:nameArray1){
            System.out.println(name);
        }
        // 你可以使用一些值来初始化数组。
        String[] nameArray2 = {"Candy", "Fancy", "Ann", "Ella", "Bob"};
        // 你可以获取数组的长度
        System.out.println("Length of nameArray2: " + nameArray2.length);
        // 你可以通过索引获取值
        System.out.println("The last item of nameArray2 is " + nameArray2[4]);
        // 对数组对象进行排序
        java.util.Arrays.sort(nameArray2);
        System.out.println("Sorted nameArray2 by alphabet:");
        for(String name:nameArray2){
            System.out.println(name);
        }
    }
}

输出:

使用以下命令运行 arrayTest.java 文件:

javac /home/labex/project/arrayTest.java
java arrayTest

查看输出:

abc
abc
abc
abc
abc
Length of nameArray2: 5
The last item of nameArray2 is Bob
Sorted nameArray2 by alphabet:
Ann
Bob
Candy
Ella
Fancy

总结

大多数任务都是处理数字和字符串等数据,因此使用 Java 内置类来执行这些任务既简单又高效。对于更高级的用法,你可以阅读官方文档。