本章内容:

1.数据类型分类
2.基本数据类型
3.字符串String
4.数组Array

1.数据类型

在Java中,变量分为两种:基本类型的变量引用类型的变量

基本数据类型(基本数据类型是CPU可以直接进行运算的类型):

  • 整数类型:byte、short、int(默认)、long
  • 浮点数类型:float、double(默认)
  • 字符类型:char
  • 布尔类型:true、false(默认)

引用数据类型:

  • 类:class
  • 数组:Array
  • 字符串:String
  • 接口:Interface

注意点:

  • char类型使用单引号',且仅有一个字符,要和双引号"的字符串类型区分开
  • float类型有效数字最长为7位,有效数字长度包括了整数部分和小数部分,float的后缀要加F/f,标志着它是float类型
  • double类型有效数字最长为15位,与 float 类型一样,double 后面也带有标志“D”或“d”
  • 不带任何标志的浮点型数据,系统默认是 double 类型
  • 一个值要能被真正看作 float,它必须以 f(或 F)后缓结束;否则,会被当作double值。对double值来说,d(或D)后缀是可选的

2.基本数据类型

Java语言内置了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

对字符型的说明

字符类型:字符char是基本数据类型,一个char保存一个Unicode字符

1
2
char c1 = 'A';
char c2 = '中';

要显示一个字符的Unicode编码,只需将char类型直接赋值给int类型即可:

1
2
int n1 = 'A'; // 字母“A”的Unicodde编码是65
int n2 = '中'; // 汉字“中”的Unicode编码是20013

字符串类型:
和char类型不同,字符串类型String是引用类型,常常使用双引号包裹起来

1
2
3
4
String s = ""; // 空字符串,包含0个字符
String s1 = "A"; // 包含一个字符
String s2 = "ABC"; // 包含3个字符
String s3 = "中文 ABC"; // 包含6个字符,其中有一个空格

数据类型转换

  1. 自动类型转换

当满足这两种条件时,将会执行自动转换:

  • 两种数据类型彼此兼容
  • 目标类型的取值范围大于源数据类型(低级类型数据转换成高级类型数据)

在运算过程中,由于不同的数据类型会转换成同一种数据类型,所以整型、浮点型以及字符型都可以参与混合运算。自动转换的规则是从低级类型数据转换成高级类型数据。转换规则如下:

  • 数值型数据的转换:byte→short→int→long→float→double。
  • 字符型转换为整型:char→int。
  1. 强制类型转换

所以当两种数据类型不兼容,或目标类型的取值范围小于源类型时,自动转换将无法进行,这时就需要进行强制类型转换,会造成精度丢失。其语法格式如下:

(type)variableName

在强制类型转换中,如果是将浮点类型的值转换为整数,直接去掉小数点后边的所有数字;而如果是整数类型强制转换为浮点类型时,将在小数点后面补零。

不同数据类型之间计算规则:
不同的数据类型运算,从前往后计算,如果是整型,正常的10进制计算,遇到字符转成10进制的ascii码值计算,一旦遇到字符串就直接拼接字符,后面都默认为字符串,就没必要转化

3.字符串String

在Java中,String是一个引用类型,它本身也是一个class。但是,Java编译器对String有特殊处理,即可以直接用”…”来表示一个字符串。

创建字符串

1
2
3
4
5
创建字符串最简单方式:
String str = "Badwoman";

通过类的方式创建:
String str = new String("Badwoman");

注意:String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了

字符串相关方法

  1. 字符串比较:比较字符串的内容是否相同。必须使用equals()方法而不能用==
  • str1.equals(str2):判断两个字符串的是否相同,如果两个字符串具有相同的字符、长度和大小写,它返回true,否则返回false
  • str1.equalsIgnoreCase(str2):与equals用法相同,但不区分大小写
  • str1.compareTo(str2):用于按字典顺序比较两个字符串的大小(基于各个字符的Unicode值),如果按字典顺序str1位于str2参数之前,比较结果为一个负整数;如果str1位于str2之后,比较结果为一个正整数;如果两个字符串相等,则结果为0
  1. 字符索引查找
    字符串.indexOf(“目标字符或字符串”):返回指定字符在字符串中第一次出现的索引,如果此字符串中没有这样的字符,则返回 -1

  2. 判断以什么开头结尾
    字符串.startsWith(“目标字符串”):判断是否以目标字符串开头
    字符串.endsWith(“目标字符串”):判断是否以目标字符串结尾

  3. 字符串的截取
    字符串.substring(起始索引,结束索引):截取目标字符串,索引从0开始,左闭右开

  4. 去掉首尾空白字符
    字符串.trim()
    字符串.strip():也可以移除字符串首尾空白字符。它和trim()不同的是,类似中文的空格字符\u3000也会被移除(基于Java11+)

  5. 替换字符串

  • 字符串.replace(a,b):返回一个新字符串,用字符b替换所有的字符a,全局替换
  • 字符串.replaceFirst(a,b):返回一个新字符串,用字符b替换第一个子字符串字符a
  • 字符串.replaceAll(a,b):返回一个新字符串,用字符b替换所有的字符a,全局替换
  1. 拼接字符串
    拼接字符串使用静态方法String.join,它用指定的字符串连接字符串数组

    1
    2
    String arr = {"A", "B", "C"};
    String s = String.join("***", arr); // "A***B***C"
  2. 字符串大小写
    str.toLowerCase():将字符串转换为小写
    str.toUpperCase():将字符串转换为大写

  3. 判断字符串是否为空
    str.isEmpty()

  4. 检测字符串是否匹配给定的正则表达式
    str.matches(String regex)

1
2
3
4
5
6
7
8
9
10
11
public class Test {
public static void main(String args[]) {
String Str = new String("www.runoob.com");

System.out.println(Str.matches("(.*)runoob(.*)")); // true

System.out.println(Str.matches("(.*)google(.*)")); // false

System.out.println(Str.matches("www(.*)")); // true
}
}
  1. 基本类型与字符串类型之间的相互转换
    要把任意基本类型或引用类型转换为字符串,可以使用静态方法String.valueOf()

    1
    2
    3
    4
    String.valueOf(123); // "123"
    String.valueOf(45.67); // "45.67"
    String.valueOf(true); // "true"
    String.valueOf(new Object()); // 类似java.lang.Object@636be97c
  2. 是否包含子字符串
    字符串.contains(“目标字符串”):返回结果true 或者 false

  3. 分割字符串
    按指定字符(串)或正则去分割某个字符串,结果以字符串数组形式返回,记住:返回结果是数组,数组无法直接打印

语法:str.split(String sign)str.split(String sign,int limit)

  • str为需要分割的目标字符串。
  • sign为指定的分割符,可以是任意字符串。
  • limit表示分割后生成的字符串的限制个数,如果不指定,则表示不限制,直到将整个目标字符串完全分割为止。
1
2
3
String s = "hello world java!!!";
String[] aa = s.split(" ");
System.out.println(aa[2]);
  1. 返回字符串长度
    字符串.length():无论是字母、数字、还是汉字,每个字符的长度都为一

  2. charAt()
    返回指定索引处的char值

  3. 转换为字符串

.toString()将目标数据类型转换为字符串

4.数组Array

声明数组变量

首先必须声明数组变量,才能在程序中使用数组,下面是声明数组变量的语法:

1
2
3
dataType[] arrayRefVar;   // 首选的方法

dataType arrayRefVar[]; // 效果相同,但不是首选方法

创建一维数组

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Main {
public static void main(String[] args) {
// 数组的创建方式一
int[] grades = new int[3];
grades[0] = 98;
grades[1] = 96;
grades[2] = 99;

// 数组的创建方式二
int[] grades = {98, 96, 99};
System.out.println(Arrays.toString(grades)); // 直接打印数组
}
}

创建二维数组

创建语法:

1
2
3
type[][] arrayName = new type[][]{值 1,值 2,值 3,…,值 n};    // 在定义时初始化
type[][] arrayName = new type[size1][size2]; // 给定空间,在赋值
type[][] arrayName = new type[size][]; // 数组第二维长度为空,可变化

Java的数组有几个特点:

  • 数组所有元素初始化为默认值,整型都是0,浮点型是0.0,布尔型是false;
  • 数组一旦创建后,大小就不可改变。
  • 要访问数组中的某一个元素,需要使用索引。数组索引从0开始,例如,5个元素的数组,索引范围是0~4。
  • 可以修改数组中的某一个元素,使用赋值语句,例如,ns[1] = 79;。
  • 可以用数组变量.length 获取数组大小

几点说明:

  • 上面讲的是静态数组。静态数组一旦被声明,它的容量就固定了,不容改变。所以在声明数组时,一定要考虑数组的最大容量,防止容量不够的现象。
  • 如果想在运行程序时改变容量,就需要用到数组列表(ArrayList,也称动态数组)或向量(Vector)。
  • 正是由于静态数组容量固定的缺点,实际开发中使用频率不高,被 ArrayList 或 Vector 代替,因为实际开发中经常需要向数组中添加或删除元素,而它的容量不好预估。

Arrays工具类(了解)

Arrays类是一个工具类,其中包含了数组操作的很多方法。这个Arrays类里均为static修饰的方法(static 修饰的方法可以直接通过类名调用),可以直接通过 Arrays.xxx的形式调用方法

  • Arrays.equals(arrayA, arrayB):数组相等的条件不仅要求数组元素的个数必须相等,而且要求对应位置的元素也相等
  • Arrays.fill(array,value):用同一种目标元素填充满数组,填充多个会被覆盖掉
  • Arrays.toString(array):Java中数组无法直接被打印出来,需要转换成字符串

参考文章


 评论

联系我 | Contact with me

Copyright © 2019-2020 谁知你知我,我知你知深。此恨经年深,比情度日久

博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议