java常用类详细介绍及总结:字符串相关类、日期时间API、比较器接口、System、Math、BigInteger与BigDecimal

一.字符串相关的类

1.String及常用方法

1.1 String的特性


String:字符串,使用一对""引起来表示。

  1. String声明为final的,不可被继承
  2. String实现了Serializable接口:表示字符串是支持序列化的。
    实现了Comparable接口:表示String可以比较大小
  3. String内部定义了final char[] value用于存储字符串数据
  4. String:代表不可变的字符序列。简称:不可变性
    体现:

    • 当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值。
    • 当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。
    • 当调用String的replace()方法修改指定字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。
  5. 通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中。
  6. 字符串常量池中是不会存储相同内容的字符串的。
    String s1 = "abc";//字面量的定义方式
    String s2 = "abc";
    s1 = "hello";
    System.out.println(s1 == s2);   // false 比较s1和s2的地址值
    System.out.println(s1); // hello
    System.out.println(s2); // abc
    System.out.println("*****************");

    String s3 = "abc";
    s3 += "def";
    System.out.println(s3); // abcdef
    System.out.println(s2); // abc
    System.out.println("*****************");

    String s4 = "abc";
    String s5 = s4.replace('a', 'm');
    System.out.println(s4); // abc
    System.out.println(s5); // mbc

1.2 String对象的创建

String的实例化方式:

  • 通过字面量定义的方式
  • 通过new + 构造器的方式
    //通过字面量定义的方式:此时的s1和s2的数据javaEE声明在方法区中的字符串常量池中。
    String s1 = "javaEE";
    String s2 = "javaEE";
    //通过new + 构造器的方式:此时的s3和s4保存的地址值,是数据在堆空间中开辟空间以后对应的地址值。
    String s3 = new String("javaEE");
    String s4 = new String("javaEE");

    System.out.println(s1 == s2);//true
    System.out.println(s1 == s3);//false
    System.out.println(s1 == s4);//false
    System.out.println(s3 == s4);//false
    System.out.println("***********************");

    Person p1 = new Person("Tom",12);
    Person p2 = new Person("Tom",12);

    System.out.println(p1.name.equals(p2.name));//true
    System.out.println(p1.name == p2.name);//true

    p1.name = "Jerry";
    System.out.println(p2.name);//Tom


面试题:String s = new String("abc");方式创建对象,在内存中创建了几个对象?
两个: 一个是堆空间中new结构,另一个是char[]对应的常量池中的数据:"abc"

1.3 String使用陷阱

关于拼接字符串后两个遍历地址是否相等。

  • 常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。
  • 只要其中有一个是变量,结果就在堆中
  • 如果拼接的结果调用intern()方法,返回值就在常量池中
    String s1 = "javaEE";
    String s2 = "hadoop";

    String s3 = "javaEEhadoop";
    String s4 = "javaEE" + "hadoop";
    String s5 = s1 + "hadoop";
    String s6 = "javaEE" + s2;
    String s7 = s1 + s2;

    final String s8 = "javaEE";//s8:常量
    String s9 = s8 + "hadoop";
    String s11 = s8 + s2;
    System.out.println(s3 == s9);   // true
    System.out.println(s3 == s11);   // false

    System.out.println(s3 == s4);//true
    System.out.println(s3 == s5);//false
    System.out.println(s3 == s6);//false
    System.out.println(s3 == s7);//false
    System.out.println(s5 == s6);//false
    System.out.println(s5 == s7);//false
    System.out.println(s6 == s7);//false

    String s10 = s6.intern();//返回值得到的s8使用的常量值中已经存在的“javaEEhadoop”
    System.out.println(s3 == s10);//true


面试题:

    String str = new String("good");
    char[] ch = { 't', 'e', 's', 't' };

    public void change(String str, char ch[]) { // 传递的是引用
        str = "test ok";    // 给传递过来的地址重新赋值,而不是改变引用重新指向
        ch[0] = 'b';
    }
    public static void main(String[] args) {
        StringTest ex = new StringTest();
        ex.change(ex.str, ex.ch);
        System.out.println(ex.str); // good string是不可变的,不能重新赋值
        System.out.println(ex.ch);  // best 数组是可变的
    }
1.4 String常用方法

基本方法:

方法 描述
int length() 返回字符串的长度: return value.length
char charAt(int index) 返回某索引处的字符return value[index]
boolean isEmpty() 判断是否是空字符串:return value.length == 0
String toLowerCase() 使用默认语言环境,将 String 中的所有字符转换为小写
String toUpperCase() 使用默认语言环境,将 String 中的所有字符转换为大写
String trim() 返回字符串的副本,忽略前导空白和尾部空白
boolean equals(Object obj) 比较字符串的内容是否相同
boolean equalsIgnoreCase(String anotherString) 与equals方法类似,忽略大小写
String concat(String str) 将指定字符串连接到此字符串的结尾。 等价于用“+”
int compareTo(String anotherString) 比较两个字符串的大小
String substring(int beginIndex) 返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后的一个子字符串。
String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。

包含:

方法 描述
boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结束
boolean startsWith(String prefix) 测试此字符串是否以指定的前缀开始
boolean startsWith(String prefix, int toffset) 测试此字符串从指定索引开始的子字符串是否以指定前缀开始
boolean contains(CharSequence s) 当且仅当此字符串包含指定的 char 值序列时,返回 true
int indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引
int indexOf(String str, int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始
int lastIndexOf(String str) 返回指定子字符串在此字符串中最右边出现处的索引
int lastIndexOf(String str, int fromIndex) 返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索

注:indexOf和lastIndexOf方法如果未找到都是返回-1

    String str1 = "hellowworld";
    boolean b1 = str1.endsWith("rld");
    System.out.println(b1);     // true

    boolean b2 = str1.startsWith("He");
    System.out.println(b2);     // false

    boolean b3 = str1.startsWith("ll",2);
    System.out.println(b3);     // true

    String str2 = "wor";
    System.out.println(str1.contains(str2));    // true

    System.out.println(str1.indexOf("lol"));    // -1

    System.out.println(str1.indexOf("lo",5));   // -1   (3+2)

    String str3 = "hellorworld";

    System.out.println(str3.lastIndexOf("or")); // 7
    System.out.println(str3.lastIndexOf("or",6));   // 4    (7-1)

    //什么情况下,indexOf(str)和lastIndexOf(str)返回值相同?
    //情况一:存在唯一的一个str。情况二:不存在str

替换:

方法 描述
String replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
String replace(CharSequence target, CharSequence replacement) 使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
String replaceAll(String regex, String replacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
String replaceFirst(String regex, String replacement) 使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。

匹配:

方法 描述
boolean matches(String regex) 告知此字符串是否匹配给定的正则表达式。

切片:

方法 描述
String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串。
String[] split(String regex, int limit) 根据匹配给定的正则表达式来拆分此字符串,最多不超过limit个,如果超过了,剩下的全部都放到最后一个元素中。

2.StringBuffer

3.StringBuilder

二.日期时间API

1.JDK8之前

1.1 System静态方法
1.2 Date类
1.3 Calendar类
1.4 SimpleDataFormat类

2.JDK8

2.1 LocalDate、LocalTime、LocalDateTime
2.2 Instant
2.3 DateTimeFormatter
2.4 其它类

三.java比较器

1.Comparable接口

2.Comparator接口

四.System类

五.Math类

六.BigInteger与BigDecimal

原文地址:https://www.cnblogs.com/itzlg/p/11984951.html

时间: 2024-10-07 05:25:51

java常用类详细介绍及总结:字符串相关类、日期时间API、比较器接口、System、Math、BigInteger与BigDecimal的相关文章

哪种机械键盘更适合打游戏? 机械键盘5种常用机械轴详细介绍

哪种机械键盘更适合打游戏? 机械键盘5种常用机械轴详细介绍 机械键盘 12-08 (4)青轴 最具特点的就是青轴,青轴一般是打字员的梦想,很少用于游戏,不过是本人的最爱,特点是只有当声音响起的时候按键才被触发,因此打字的时候噼里啪啦,无论是指尖还是心理上都得到了极大满足. 但是其"机动性"打字和双击时效果并不是很好,因为触底比"触发"要高,这款特别适合输入文字,但是要注意噪音很大,但这也是我喜欢MX青轴的原因之一. (5)白轴 最后说一下白轴,目前白轴基本已经停产了

Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介

Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- Android包 : android.net 包 (1接口, 19类, 3枚举, 1异常), android.net.http 包 (6类), android.net.nsd 包 (3接口, 2类), android.net.rtp (4类), android.net.sip 包 (1接口, 9类, 1

Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析

目录 0.前言 1.TemporalAccessor源码 2.Temporal源码 3.TemporalAdjuster源码 4.ChronoLocalDate源码 5.LocalDate源码 6.总结 0.前言 通过前面Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类中主要的类关系简图如下: 可以看出主要的LocalDate, LocalTime, LocalDateTime, Instant都是实现相同的接口,这里以LocalDate为例分析jav

Java日期时间API系列20-----Jdk8中java.time包中的新的日期时间API类,ZoneId时区ID大全等。

Java日期时间API系列19-----Jdk8中java.time包中的新的日期时间API类,ZonedDateTime与ZoneId和LocalDateTime的关系,ZonedDateTime格式化和时区转换等.中已经对ZoneId说明,并列出了常用时区ID信息. 并且通过 java.time.ZoneId.getAvailableZoneIds()获取到所有可用时区ID. 1.测试代码 /** * 获取可用时区ID */ @Test public void getAvailableZon

Java日期时间API系列19-----Jdk8中java.time包中的新的日期时间API类,ZonedDateTime与ZoneId和LocalDateTime的关系,ZonedDateTime格式化和时区转换等。

通过Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类中时间范围示意图:可以很清晰的看出ZonedDateTime相当于LocalDateTime+ZoneId. ZonedDateTime是用来处理时区相关的时间,它的各种计算都离不开ZoneId.先看ZoneId. 1. ZoneId 为时区ID,比如Europe/Paris,表示欧洲巴黎时区 1.1 时区相关知识,时区,UTC时间,GMT时间,Unix时间戳 时区 地球自西向东旋转,东边比西边先看到

Java日期时间API系列11-----Jdk8中java.time包中的新的日期时间API类,使用java8日期时间API重写农历LunarDate

通过Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的优点,java8具有很多优点,现在网上查到的农历转换工具类都是基于jdk7及以前的类写的,下面使用java新的日期时间API重写农历LunarDate. package com.xkzhangsan.time; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import ja

Java日期时间API系列13-----Jdk8中java.time包中的新的日期时间API类,时间类转换,Date转LocalDateTime,LocalDateTime转Date

从前面的系列博客中可以看出Jdk8中java.time包中的新的日期时间API类设计的很好,但Date由于使用仍非常广泛,这就涉及到Date转LocalDateTime,LocalDateTime转Date.下面是时间类互相转换大全,包含Instant.LocalDate.LocalDateTime.LocalTime和Date的相互转换,下面是一个工具类,仅供参考: package com.xkzhangsan.time.converter; import java.time.Instant;

Java日期时间API系列17-----Jdk8中java.time包中的新的日期时间API类,java日期计算4,2个日期对比,获取相差年月日部分属性和相差总的天时分秒毫秒纳秒等

通过Java日期时间API系列9-----Jdk8中java.time包中的新的日期时间API类的Period和Duration的区别 ,可以看出java8设计非常好,新增了Period和Duration类,专用于对比2个时间场景: Period,可以获取2个时间相差的年月日的属性. Duration,可以获取2个时间相差总的天时分秒毫秒纳秒. 下面应用: /** * 获取2个日期的相差年月天的年数部分 * @param startInclusive * @param endExclusive

Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的特点

1.不变性 新的日期/时间API中,所有的类都是不可变的,这对多线程环境有好处. 比如:LocalDateTime 2.关注点分离 新的API将人可读的日期时间和机器时间(unix timestamp)明确分离,它为日期(Date).时间(Time).日期时间(DateTime).时间戳(unix timestamp)以及时区定义了不同的类. 不同时间分解成了各个类,比如:LocalDate, LocalTime, LocalDateTime, Instant,Year,Month,YearMo