java的数据类型可以说很简洁,只有整型,浮点型,字符型,和布尔型四大种,八小种基本类型。
byte:
-2^7 ~ 2^7-1,即-128 ~ 127。1字节。
short:-2^15 ~ 2^15-1,即-32768 ~ 32767。2字节。
int:
long:-2^63 ~ 2^63-1,即-9223372036854774808 ~ 9223372036854774807。8字节。Long。末尾加L。(也可以不加L)
float:4字节
**double:**8字节
**char:**2字节
**boolean:**1字节
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
Character静态方法(里面包含了对字符的一些处理):
最小值: Integer.MIN_VALUE = -231= -21 4748 3648
最大值:Integer.MAX_VALUE=231-1=21 4748 3647(21亿左右)
定义
int[] array = new int[5];
Arrays类常用方法:
规则:起始下标 <= 数组 < 终止下标
例如:Arrays.sort(a,1,4)
排序:将下标 1, 2, 3 的数字排序
注意:
1. 数字代表着下标
2. 边界左闭右开
源码:
public static <T> void sort(T[] a,int fromIndex, int toIndex, Comparator<? super T> c)
Comparator - 排序规则:默认为从小到大,如果想要倒序,需要传入Comparator参数,来改变排序规则
例如:将二维数组按照第一个元素倒序排列
int[][] values = new int[n][3];
for (int i = 0; i < n; i++) {
values[i][0] = aliceValues[i] + bobValues[i];
values[i][1] = aliceValues[i];
values[i][2] = bobValues[i];
}
Arrays.sort(values, (a, b) -> b[0] - a[0]);
可以看到,实现倒序的方法:
1. 使用Lambda表达式,实现Comparator函数式接口
2. 使用第二个参数值 - 第一个参数值
神奇的:
1. 返回的值类型,是第一个参数values一个二维数组
2. 而排序规则,是Lambda表达式中的参数来排序
int length():返回字符串的长度
char charAt(int index):返回指定索引处的字符
boolean isEmpty():判断字符串是否为空
String toLowerCase():将字符串中的所有字符转换为小写
String toUpperCase():将字符串中的所有字符转换为大写
String trim():返回字符串的副本,去掉前导空白和尾部空白,中间的空白不会被去掉
boolean equals(Object obj):比较字符串的内容是否相同
boolean equalsIgnoreCase(String anotherString):忽略大小写,比较字符串的内容是否相同
String concat(String str):将指定字符串连接到此字符串的结尾,等价于用“+”
int compareTo(String anotherString):比较两个字符串的大小
String substring(int beginIndex):返回从beginIndex到末尾的子字符串
String substring(int beginIndex, int endIndex):返回从beginIndex到endIndex前一位的子字符串,不包括endIndex
boolean endsWith(String suffix): 判断字符串是否以指定的后缀结束
boolean startsWith(String prefix):判断字符串是否以指定的前缀开始
boolean startsWith(String prefix, int toffset):判断字符串在指定索引开始的子字符串是否以指定前缀开始
boolean contains(CharSequence s):判断当前字符串中是否包含指定的字符串
int indexOf(String str):返回指定子字符串在当前字符串中第一次出现处的索引
int indexOf(String str, int fromIndex):返回从指定的索引后,指定子字符串在当前字符串中第一次出现处的索引
int lastIndexOf(String str):返回指定子字符串在当前字符串中最后一次出现处的索引
int lastIndexOf(String str, int fromIndex):返回从指定的索引后,指定子字符串在当前字符串中最后一次出现处的索引
注:indexOf和lastIndexOf方法如果未查找到指定子字符串时,返回值都为-1。
String replace(char oldChar, char newChar):替换当前字符串中指定的子字符串
String[] split(String regex):根据指定的符号拆分当前字符串,然后返回一个String数组
三种方式:
new Integer(String s)
Integer.parseInt(String s)
Integer.valueOf(String s)
Integer.valueOf()和Integer.parseInt()的不同:
Integer.valueOf()和Integer.valueOf()两个方法的返回值类型不一样
Integer.valueOf()返回一个Integer类型的数据,是int的包装类
Integer.parseInt()返回一个int类型的数据。
如果使用int类型数据接受返回值,两者没有什么不同,但是如果使用Integer类型数据接受返回值,Integer.valueOf()会报警告。
字符串转字符:
s.charAt(i)
字符转字符串:
法1:String构造方法
char[] ch=new char(){'1','2','3'};
string str=new string(ch);
法2:Character
char ch = 'U';
String charToString = Character.toString(ch);
法3:使用String.valueOf()
char ch = 'U';
String valueOfchar = String.valueOf(ch);
法4:和字符串直接拼接
char ch = 'U';
String str = "" + ch;
字符串转字符数组:
char[] arr = s.toCharArray();
字符数组转字符串:
new String(arr)
String 底层值char[]型常量,修改他,java底层会给他重新创建一个空间来存储修改值
而StringBuilder和StringBuffer,底层是char[]型,是变量,修改值,会在原来的空间直接修改
StringBuffer和StringBuilder中常用的方法:
StringBuffer append(xxx):拼接字符串
StringBuffer delete(int start,int end):删除指定范围的内容,左开右闭
StringBuffer replace(int start, int end, String str):替换指定范围的内容
StringBuffer insert(int offset, xxx):在指定位置插入指定的内容
StringBuffer reverse() :把当前字符序列逆转
public int indexOf(String str) : 返回指定子字符串在当前字符串中第一次出现处的索引
public String substring(int start,int end) :返回指定范围的子字符串
public int length() : 返回字符串的长度
public char charAt(int n ) : 获取指定索引处的字符
public void setCharAt(int n ,char ch) : 设置指定索引处的字符
setLength(int newLength) :设置长度
面试题:String、StringBuffer和StringBuilder的异同?
相同点:底层都是通过char数组实现的
不同点:
String对象一旦创建,其值是不能修改的,如果要修改,会重新开辟内存空间来存储修改之后的对象;而StringBuffer和StringBuilder对象的值是可以被修改的;
StringBuffer几乎所有的方法都使用synchronized实现了同步,线程比较安全,在多线程系统中可以保证数据同步,但是效率比较低;而StringBuilder 没有实现同步,线程不安全,在多线程系统中不能使用 StringBuilder,但是效率比较高。
如果我们在实际开发过程中需要对字符串进行频繁的修改,不要使用String,否则会造成内存空间的浪费;当需要考虑线程安全的场景下使用 StringBuffer,如果不需要考虑线程安全,追求效率的场景下可以使用 StringBuilder。
Java运算符分为以下几种:
➤算术运算符:+,-,*,/,%,++,–
➤赋值运算符:=
➤扩展后的赋值运算符:+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=,>>>=
➤位运算符:&,|,~,^,<<,>>,>>>
➤比较运算符:>,>=,<,<=,==
➤逻辑运算符:&&,&,||,|,!,^
➤三目运算符:? :
&:按位与。当两位同时为1时才返回1。
|:按位或。只要有一位为1就返回1。
~:按位非。单目运算符,将操作数的每一位(包括符号位)全部取反。
^:按位异或。当两位不同时返回1,相同时返回0。
<<:左移运算符。
:右移运算符
:无符号右移运算符
三目运算符
(expression) ? if-true-statement : if-false-statement
三目运算符的语法规则是:先对逻辑表达式expression求值,如果expression返回true,则返回第二个操作数的值,否则返回第三个操作数的值。
示例:
if (aliceSum > bobSum) {
return 1;
} else if (aliceSum == bobSum) {
return 0;
} else {
return -1;
}
->
return aliceSum > bobSum ? 1 : aliceSum == bobSum ? 0 : -1;