Java基础知识总结

2019-10-14 00:00:00 java 基础知识

Java基础知识总结

基本数据类型

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
《Java基础知识总结》

基本类型之间的转换

《Java基础知识总结》

强制类型转换

如果要把大的转成小的,或者在short与char之间进行转换,就必须强制转换,也被称作缩小转换(narrowing conversion),因为必须显式地使数值更小以适应目标类型。强制转换采用转换操作符()。严格地说,将byte转为char不属于narrowing conversion),因为从byte到char的过程其实是byte–>int–>char,所以widening和narrowing都有。强制转换除了可能的精度损失外,还可能使模(overall magnitude)发生变化。

字符串

创建字符串

String name = new String("星星");

或者

String name = "星星";

字符串长度

用于获取有关对象的信息的方法称为访问器方法。
String 类的一个访问器方法是 length() 方法,它返回字符串对象包含的字符数。

连接字符串

String 类提供了连接两个字符串的方法:

string1.concat(string2);

返回 string2 连接 string1 的新字符串。也可以对字符串常量使用 concat() 方法,如:

"星星".concat("star");

更常用的是使用’+’操作符来连接字符串,如:

"Hello," + " star" + "!"

创建格式化字符串

我们知道输出格式化数字可以使用 printf() 和 format() 方法。
String 类使用静态方法 format() 返回一个String 对象而不是 PrintStream 对象。
String 类的静态方法 format() 能用来创建可复用的格式化字符串,而不仅仅是用于一次打印输出。

字符串比较

使用equals()方法,区分大小写

System.out.println("star".equals("star"));

使用equalsIgnoreCase()方法,忽略大小写

System.out.println("star".equalsIgnoreCase("Star"));

字符串截取,使用substring()方法

String blog = "star and moon";
 String sub1 = string.substring(2);
 String sub2 = blog.substring(2, 4);
 System.out.println(sub1);
 System.out.println(sub2);

字符串查找,使用indexOf()方法

String string2 = "I love Java";
 String string3 = "o";
 int serindex1 = string2.indexOf(string3); //从String2开始位置查找string3字符串
 int serindex2 = string2.indexOf(string3,5); //从String2字符串第二个位置查找string3字符串
 System.out.println(serindex1); //从0开始
 System.out.println(serindex2); //查询不到显示-1

字符串替换,replace(oldChar, newChar)

char oldChar = 'I';
 char newChar = 'U';
 string2.replace(oldChar, newChar);
 System.out.print(string2.replace(oldChar, newChar));

字符串转换字符数组

String hellostring = "hello";
 char[] helloArray = hellostring.toCharArray();

String StringBuffer 和 StringBuilder 的区别

  • 可变性

简单的来说:String 类中使用 final 关键字修饰字符数组来保存字符串,private final char value[],所以 String 对象是不可变的。而StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使用字符数组保存字符串char[]value 但是没有用 final 关键字修饰,所以这两种对象都是可变的。
StringBuilder 与 StringBuffer 的构造方法都是调用父类构造方法也就是 AbstractStringBuilder 实现的,大家可以自行查阅源码。

AbstractStringBuilder.java

abstract class AbstractStringBuilder implements Appendable, CharSequence {
    char[] value;
    int count;
    AbstractStringBuilder() {
    }
    AbstractStringBuilder(int capacity) {
        value = new char[capacity];
    }
}
  • 线程安全性

String 中的对象是不可变的,也就可以理解为常量,线程安全。AbstractStringBuilder 是 StringBuilder 与 StringBuffer 的公共父类,定义了一些字符串的基本操作,如 expandCapacity、append、insert、indexOf 等公共方法。StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。 

  • 性能
    每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象。StringBuffer 每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用 StringBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。

对于三者使用的总结:

  1. 操作少量的数据: 适用String

  2. 单线程操作字符串缓冲区下操作大量数据: 适用StringBuilder

  3. 多线程操作字符串缓冲区下操作大量数据: 适用StringBuffer

大数值

在 Java 中提供了大数字的操作类,即 java.math.BigInteger 类与 java.math.BigDecimal 类。这两个类用于高精度计算, BigInteger 类是针对大整数的处理类,而 BigDecimal 类则是针对大小数的处理类。

使用静态的valueOf方法可以将普通的数值转换成大数值。

数组

Java 语言中提供的数组是用来存储固定大小的同类型元素。

数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。

数组属引用类型,数组型数据是对象(object),数组中的每个元素相当于该对象的成员变量。

数组是多个相同类型数据的组合,实现对这些数据的统一管理。一个数组实际上就是一连串的变量,数组按照使用可以分为一维数组、二维数组、多维数组。

声明数组变量

首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:
dataType[] arrayRefVar; // 首选的方法dataType arrayRefVar[]; // 效果相同,但不是首选方法

创建数组

Java语言使用new操作符来创建数组 dataType[] arrayRefVar = new dataType[arraySize];

For-Each 循环

JDK 1.5 引进了一种新的循环类型,被称为 For-Each 循环或者加强型循环,它能在不使用下标的情况下遍历数组。

语法格式如下:

for(type element: array)
{
    System.out.println(element);
}

多维数组

多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组,例如:

String str[][] = new String[3][4];

Arrays 类

java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。
具有以下功能:

  • 给数组赋值:通过 fill 方法。
  • 对数组排序:通过 sort 方法,按升序。
  • 比较数组:通过 equals 方法比较数组中元素值是否相等。
  • 查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。
    原文作者:Leton
    原文地址: https://www.cnblogs.com/leton/p/11667839.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章