包装类--Math 类--Arrays 类--System 类

简介: 包装类--Math 类--Arrays 类--System 类

包装类的分类

包装类和基本数据的转换

演示包装类和基本数据类型的相互转换,这里以int和Integer演示。

1)jdk5前的手动装箱和拆箱方式,装箱:基本类型->包装类型,反之,拆箱

2)jdk5以后(含jdk5)的自动装箱和拆箱方式

3)自动装箱底层调用的是valueOf方法,比如Integer.valueOf()

4)其它包装类的用法类似,

演示 int <–> Integer 的装箱和拆箱

jdk5 前是手动装箱和拆箱

手动装箱 int->Integer

int n1 = 100;

Integer integer = new Integer(n1);

Integer integer1 = Integer.valueOf(n1);

手动拆箱 Integer -> int

int i = integer.valueOf(n1);

自动装箱 int->Integer

Integer integer2 = n2;

底层使用的是

Integer.valueOf(n2)

自动拆箱

Integer->int

int n3 = integer2;

底层仍然使用的是valueOf

Integer主要是看范围 -128 ~ 127 就是直接返回 ,否则,就 new Integer(xx)

Integer 类和 Character

System.out.println(Integer.MIN_VALUE); //返回最小值

System.out.println(Integer.MAX_VALUE);//返回最大值

System.out.println(Character.isDigit(‘a’));//判断是不是数字

System.out.println(Character.isLetter(‘a’));//判断是不是字母

System.out.println(Character.isUpperCase(‘a’));//判断是不是大写

System.out.println(Character.isLowerCase(‘a’));//判断是不是小写

System.out.println(Character.isWhitespace(‘a’));//判断是不是空格

System.out.println(Character.toUpperCase(‘a’));转成大写

System.out.println(Character.toLowerCase(‘A’));//转成小写

String 类

String 类的理解和创建对象

创建 String 对象的两种方式

1)方式一:直接赋值 String s= "wyx”

2)方式二:调用构造器 String s = new String(“wyx”);

区别

方式一:直接赋值 String s= "wyx";

方式二:调用构造器 String s2 = new String("wyx");

1.方式一:先从常量池查看是否有"wyx"数据空间,如果有,直接指向;如果没有则重新创建,然后指向。s最终指向的是常量池的空间地址

2.方式二:先在堆中创建空间,里面维护了value属性,指向常量池的wyx空如果常量池没有"wyx",重新创建,如果有,直接通过value指向。最终指的是堆中的空间地址。

3.画出两种方式的内存分布图

字符串的特性

说明

1)String是一个final类,代表不可变的字符序列

2)字符串是不可变的。一个字符串对象一旦被分配,其内容是不可变的1.以下语句创建了几个对象?画出内存布局图。

String s1 = "hello";

s1="haha"; //1min

/创建了2个对象

小结:

底层是 StringBuilder sb = new StringBuilder();

sb.append(a); sb.append(b);sb是在堆中,

并且append是在原来字符串的基础上追加的

重要规则:

String c1 = “ab” + “cd”;常量相加,看的是池。

String c1 = a+b;变量相加,是在堆中

String 类的常见方法

说明

String类是保存字符串常量的。每次更新都需要重新开辟空间,效率较低,因此jawa设计者还提供了StringBuilder 和 StringBuffer 来增强String的功能并提高效率。

String 类的常见方法一览

StringBuffer 类

基本介绍

  1. Java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删
  2. 很多方法与String相同,但StringBuffer是可变长度的。
  3. StringBuffer是一个容器。

String VS StringBuffer

  1. String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低//private final char value[];
  2. StringBuffer保存的是字符串变量,里面的值可以更改,每次
  3. StringBuffer的更新实际上可以更新内容,不用每次更新地址,效率较高/char[] value;//这个放在堆

String 和 StringBuffer 相互转换

//方式 1 使用构造器

//注意: 返回的才是 StringBuffer 对象,对 str 本身没有影响

StringBuffer stringBuffer = new StringBuffer(str);

//方式 2 使用的是 append 方法

StringBuffer stringBuffer1 = new StringBuffer();

stringBuffer1 = stringBuffer1.append(str)

StringBuffer ->String

//方式 1 使用 StringBuffer 提供的 toString 方法

String s = stringBuffer3.toString();

//方式 2: 使用构造器来搞定

String s1 = new String(stringBuffer3)

StringBuilder 类

1)一个可变的字符序列。此类提供一个与StringBuffer兼容的API,但不保证同步(StringBuilder 不是线程安全)。该类被设计用作 StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类因为在大多数实现中,它比StringBuffer要快[后面测]。

2)在 StringBuilder上的主要操作是 append 和 insert方法,可重载这些方法,以接受任意类型的数据。

  1. StringBuilder 和 StringBuffer 均代表可变的字符序列,方法是一样的,所以使用和StringBuffer一样,
  1. StringBuilder 继承 AbstractStringBuilder 类
  2. 实现了 Serializable ,说明 StringBuilder 对象是可以串行化(对象可以网络传输,可以保存到文件)
  3. StringBuilder 是 final 类, 不能被继承
  4. StringBuilder 对象字符序列仍然是存放在其父类 AbstractStringBuilder 的 char[] value; 因此,字符序列是堆中
  5. StringBuilder 的方法,没有做互斥的处理,即没有 synchronized 关键字,因此在单线程的情况下使用 // StringBuilder stringBuilder = new StringBuilder()

String、StringBuffer 和 StringBuilder 的比较

1)StringBuilder 和 StringBuffer非常类似,均代表可变的字符序列,而且方法也一样

2)String:不可变字符序列,效率低,但是复用率高。

3)StringBuffer:可变字符序列、效率较高(增删)、线程安全,看源码

4)StringBuilder:可变字符序列、效率最高、线程不安全

5)String使用注意说明:

string s="a";//创建了一个字符串

s+="b";/实际上原来的"a"字符串对象已经丢弃了,现在又产生了一个字符串s+"b"(也就是"ab")。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的性能=>结论:如果我们对String做大量修改,不要使用String

String、StringBuffer 和 StringBuilder 的选择

Math 类

基本介绍

Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数

方法一览

Arrays 类

Arrays 类常见方法

System 类

System 类常见方法

1)exit退出当前程序

2)arraycopy:复制数组元素,比较适合底层调用,一般使用Arrays.copyOf完成复制数组

int[] src={1,2,3};

int[] dest = new int[3];

System.arraycopy(src, 0, dest, 0, 3);

3)currentTimeMillens:返回当前时间距离1970-1-1的毫秒数

4)gc:运行垃圾回收机制 System.gc();

BigInteger 和 BigDecimal 类

应用场景:

1)Biglnteger适合保存比较大的整型

2)BigDecimal适合保存精度更高的浮点型(小数)

BigInteger BigDecimal常见方法

1)add加 2)subtract减

3)multiply乘 4) divide除


目录
相关文章
|
3月前
|
Java
【Java】Math、System、RunTime、BigDecimal类常用方法
【Java】Math、System、RunTime、BigDecimal类常用方法
|
1月前
|
Java
java的Random类和Arrays.sort类使用实例
java的Random类和Arrays.sort类使用实例
10 0
|
2月前
|
Java
Java Number & Math 类详解
在 Java 中,`Number` 类和 `Math` 类是处理数字和数学运算的重要工具。
|
6月前
|
Java 编译器
Java Number & Math 类
4月更文挑战第12天
|
6月前
|
Java
【JAVA】与数字相关的类,Number & Math 类
【JAVA】与数字相关的类,Number & Math 类
70 0
|
存储 缓存 Java
【Java】int和Integer的区别?为什么有包装类?
【Java】int和Integer的区别?为什么有包装类?
|
Java
Java 数组中System.arraycopy()方法和System类中相关的其他方法的使用详解
Java 数组中System.arraycopy()方法和System类中相关的其他方法的使用详解
56 0
Math类的常用方法
Math类的常用方法
51 0
|
Java API 容器
Java中的Object类Date类Calendar类System类StringBuilder类
Java中的Object类Date类Calendar类System类StringBuilder类