Java 基础回顾-4:几个比较重要的预定义类

本文详细介绍了Java中四个重要的预定义类:String、Object、枚举(Enum)以及数组。重点讲解了String的不可变性、常用方法,Object的finilize(), equals(), hashCode(), clone()方法,枚举的使用和扩展,以及数组的声明、实例化、访问和相关工具类。此外,还讨论了数组与泛型的关系。" 109179843,5714711,深度学习基础:RNN与LSTM详解,"['深度学习', '循环神经网络', 'LSTM', '自然语言处理', '神经网络']
摘要由CSDN通过智能技术生成

这篇文章中梳理了 Java 中几个常见的预定义类:字符串类型 String 类、Object 类、枚举类型 Enum 类以及数组。

1、字符串 String 类

1.1 字符串相关问题总结

String 的每一个看起来会修改 String 的方法实际都是创建一个全新的 String 对象,以包含修改后的字符串的内容,而最初的 String 对象则丝毫未动;

String 使用 char value[] 存储字符,所以 String 对象在创建之后就不能修改对象存储的字符串内容,正因如此才说 String 类型是不可变的;

String 使用正则表达式的方式,应该注意一下下面的这些方法参数是正则表达式而不是普通的字符串:

1. 匹配验证操作:`"asd".matches("[0-9]")`
2. 分割操作:`"0as0d".split("[0-9]")`
3. 替换操作:`"0a0sd".replaceAll("[0-9]", "09")`

除了调用 String 对象的方法,还可以使用 PatternMatcher 两个类来使用正则表达式:

private static Pattern imagePattern;

public static Uri getPreviewImage(String noteContent) {
    if (imagePattern == null) {
        imagePattern = Pattern.compile(Constants.REGEX_NOTE_PREVIEW_IMAGE);
    }
    Matcher matcher = imagePattern.matcher(noteContent);
    if (matcher.find()) {
        String str = matcher.group();
        if (!TextUtils.isEmpty(str)) {
            // do something...
        }
    }
    return null;
}

String 类有一个特殊的创建方法,就是使用 "" 创建。比如 new String("str") 实际上创建了两个对象:一个是通过 "" 创建的,另一个是使用 new 创建。只是创建的时期不同:一个是在编译器,一个是在运行期。

运行期间调用 String 的 intern 方法可以向 String Pool 中动态添加对象。如

String s1 = "strs";
String s2 = s1.intern();

这个时候,如果我们使用`s1 == s2`进行判断的话会得到什么结果呢?    
答案是 true. 参考intern方法的注释:如果 Pool 中存在一个与当前 String 相等(所谓的相等是指使用 equals 方法判断时相等)的对象的时候,就返回 Pool 中的那个对象。否则,就将当前的 String 添加到 Pool 中。

注意字符串拼接操作和 == 操作的优先级:

String s = "str";
System.out.println("s == s " + s == s);
System.out.println("s == s " + (s == s));

输出的结果是:
    false
    s == s true

这是因为不管 + 号是用作加法还是用作连接字符串,它的优先级都要比 == 号要高。

使用字符串拼接操作符 + 来拼接字符串,不适合运用在大规模的场景中,这是因为当两个字符串拼接到一起时,它们的内容都要被拷贝。

char 类型是采用 UTF-16 编码的 Unicode 代码点,大多数 Unicode 字符用一个代码单元,辅助字符需要两个代码单元,使用 charAt 的时候获取的是指定位置的代码单元,所以当字符串中存在需要两个代码单元的字符时,就容易出现错误。一般可以使用下面的形式获取每个代码点

int cp = sentence.codePointAt(n);
If(Character.isSupplementaryCodePoint(cp)) i += 2;
else i++;

1.2 其他

  1. String 类型为 0 或多个双字节 Unicode 字符组成的序列,默认为 null,这与 ”” 不同。所以,要判断一个字符串是否为空,可以使用下面的形式 if (str != null && str.length != 0),即说明字符串不是 null 也不是 ””
  2. 字符串不是字符数组,不能按照数组的方式访问;
  3. 比较字符串是否相等要用 equals 方法(C++可以用 ==,C语言使用 strcmp);
  4. 要由许多小段的字符串构建字符串,使用 StringBuilder 效率更高;
  5. 如果要修改字符串指定位置的字符,使用 subString() 截取然后再使用 + 或者 StringBuilder 进行拼接即可;
  6. 文件路径中的反斜号前要增加一个额外的反斜号,如 ”c:\\myDir\\myFile.txt”
  7. Java 中字符串的长度是不可变的,这样设计是为了使字符串共享;
  8. 使用 String.format() 静态方法可以创建一个格式化的字符串,而不输出,比如:String msg = Sting.format(“Age is %d”,age);

2、Object 类

所有类型都隐式的派生于 java.lang.Object 类,其主要用于两个目的:

  1. 使用 Object 引用绑定任何数据类型的对象;
  2. Object 类型执行许多基本的一般用途的方法,包括 equals(), finalize(), hashCode(), getClass(), toString(), notify(), notifyAll()wait() 等.

2.1 finilize() 方法

  1. 它是不可预测的,也是很危险的&#x
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值