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% 左右的性能提升,但却要冒多线程不安全的风险。
对于三者使用的总结:
操作少量的数据: 适用String
单线程操作字符串缓冲区下操作大量数据: 适用StringBuilder
多线程操作字符串缓冲区下操作大量数据: 适用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 方法能对排序好的数组进行二分查找法操作。
原文地址: https://www.cnblogs.com/leton/p/11667839.html
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
相关文章