java基本知识详解

java基本知识详解_第1张图片

八大基本数据类型

java的数据类型可以说很简洁,只有整型,浮点型,字符型,和布尔型四大种,八小种基本类型。

整型

byte
-2^7 ~ 2^7-1,即-128 ~ 127。1字节。

short:-2^15 ~ 2^15-1,即-32768 ~ 32767。2字节。

int

  • int有符号:-2^31 ~ 2^31-1,即-2147483648 ~ 2147483647。4字节。Integer。
  • int无符号:0~2^32-1。

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

Character静态方法(里面包含了对字符的一些处理):

  • Character.isLetter(ch)判断一个字符是否为字母,当为字母时,则返回true,否则返回false
  • Character.isDigit(ch)判断ch单字符是否是数字
  • Character.toLowerCase(ch)将ch单字符转换为小写字母,如果里面有其他字符,原样输出。
  • Character.toUpperCase(ch)将ch单字符转换为大写字母,如果里面有其他字符,原样输出。
  • Character.isWhitespace(ch)判断ch单字符是否为字母

自动装箱和拆箱

类型最大最小值

最小值: Integer.MIN_VALUE = -231= -21 4748 3648
最大值:Integer.MAX_VALUE=231-1=21 4748 3647(21亿左右)

数组

数组定义与使用

定义

int[] array = new int[5];

Array的静态方法

Arrays类常用方法:

  • 1.Arrays.toString():快速输出数组内容
    • Arrays.toString(a)
  • 2.Arrays.sort()方法:数组排序,默认升序排列
    • Arrays.sort(数组名)
    • Arrays.sort(数组名,起始下标,终止下标)
规则:起始下标 <= 数组 < 终止下标

例如:Arrays.sort(a,14)
排序:将下标 1, 2, 3 的数字排序

注意:
    1. 数字代表着下标
    2. 边界左闭右开
  • Arrays.sort(数组名,起始下标,终止下标,排序规则)
源码:
    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表达式中的参数来排序
  • 3.Arrays.equals()方法:比较两个数组内容是否相等
    • booleanisSame= Arrays.equals(a,b);
  • 4.Arrays.binarySearch():在数组中查找元素
    • int Arrays.binarySearch( Datatype[], Datatype key)
  • 5.Arrays.copyOf():复制数组,并设置复制的大小
    • arr2 = Arrays.copyOf(arr1, 10)
  • 6.Arrays.fill(arr, -1):对数组进行数值填充(用-1将数组填充)

字符串

字符串常用方法

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方法如果未查找到指定子字符串时,返回值都为-1String 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()会报警告。

int整数转字符串
  1. Integer.toString(int num)
  2. String.valueOf(i)
字符串与字符

字符串转字符:

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)

字符与整数转化
  • 整数x转字符a:char a =(char)(‘a’+x) – 整数转字符串,强转即可
  • 字符a转整数x:int x = a - ‘a’

StringBuilder 和 StringBuffer

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。

运算符todo

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;

你可能感兴趣的:(java基础,java,开发语言)