博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
String 类
阅读量:3963 次
发布时间:2019-05-24

本文共 4740 字,大约阅读时间需要 15 分钟。

一、String 类

String 类型称为字符串类型,是编程过程中使用最频繁的一种类型,它属于引用类型,因为它使用太频繁,所以String与其它一般的引用类型在使用过程中有一些特殊之处。
正确全面地掌握String 的特征对所有开发人员都是基本要求。
java.lang.String 在语言包中,对整个应用具有基础性的作用,在 jdk的api中广泛使用。绝对不要把自已定义的类命名为String,否则会造成程序的混乱。
1、了解String 的内部结构
原码显示

private final char value[];

内部有一个char类型的数组,说明该数组长度是固定的,还带上了final(关键字,有最终最后的含义,该属性一旦创建就不能修改),一旦创建了字符串对象就不能修改了,String是不可变的字符串。

String 的一般表达形式是: “abc346”,字符串一旦创建并赋值后,值就是value[]数组的元素。“abc346” = {‘a’,b’’,’c’,’’3,’4’,’6’},所以说,字符串等同于一份字符数组。
原码显示

public final class String

类名前加 final就表示该类不能再派生出子类,此类是最终的类,这是为了防止其它的人去继承String 并改写内部的方法,否则整个 java的应用体系就崩溃掉。

2、生成 String 的对象

构造方法
String()
初始化新创建的 String对象,使其表示空字符序列。
String(char[] value)
分配一个新的 String ,以便它表示当前包含在字符数组参数中的字符序列。
String(byte[] bytes, Charset charset)
构造一个新的String由指定用指定的字节的数组解码charset 。
String(String original)
初始化新创建的String对象,使其表示与参数相同的字符序列; 换句话说,新创建的字符串是参数字符串的副本。

String str1 = new String();//通过一份字符数组对象来生成字符串对象String str2 = new String(new char[]{
'a','b','4'});//通过一份字节数组及指定的字符集来生成字符串对象,如果编码集指定错误汉字会产生乱码,//这种情况在javaWeb时是必须要解决的问题String str3 = new String("中国".getBytes(),"utf-8");System.out.println(str1+" "+str2+" "+str3);

采用直接赋值的方式

//是最常用的生成字符串对象的方式String str = "abcdef";

3、字符串的比较

对于引用类型的对象,对象之间的比较有两种方式,分别是 == 比较及equals 比较。
对于基本类型的数据只能作 == 比较。
结合字符串来学习两种比较方式的作用及用法。
== 比较的是对象的地址,对象变量存放的就是地址.
Equals比较原意也是比较两个对象是否是同一个对象,也是比较对象的地址。在有一些比较特别的对象中,equals方法会被重写,从而实现不同内容的比较。
原码中Object类的 equals方法 可以看出equals执行的就是== 比较的结果

public boolean equals(Object obj) {
return (this == obj);}String的原码中equals方法,String 重写了Object 的equals方法,因此字符串的equals 比较就不是单纯的地址比较,它比较的是字符串的值是否相同public boolean equals(Object anObject) {
if (this == anObject) {
return true; } if (anObject instanceof String) {
String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) {
char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) {
if (v1[i] != v2[i]) return false; i++; } return true; } } return false;}

通过以上分析得到最终结论,针对字符串对象,==比较是比较地址是否一样,equals比较是比较值是否一样。

String str1 = "abc";String str2 = "xyz";String str3 = "abc";System.out.println("str1 == str2?"+(str1 == str2)); //trueSystem.out.println("str1 == str3?"+(str1 == str3)); //false

以上比较的结果是true,false。

String str1 = new String("abc");String str2 = new String("xyz");String str3 = new String("abc"); System.out.println("str1 == str2?"+(str1 == str2)); System.out.println("str1 == str3?"+(str1 == str3));

以上比较的结果是false,false

原因下图说明
在这里插入图片描述

String str1 = "abc";String str2 = "xyz";String str3 = "abc";System.out.println("str1 equals str2?"+(str1.equals(str2)));System.out.println("str1 equals str3?"+(str1.equals(str3)));String str1 = new String("abc");String str2 = new String("xyz");String str3 = new String("abc");System.out.println("str1 equals str2?" + (str1.equals(str2)));System.out.println("str1 equals str3?" + (str1.equals(str3)));

以上比较是比较值是否相同,所以结果相同都是false,true.

4、字符串的常用方法

字符串的方法比较多,主要是连接,取子串,判断索引位置的字符,判断字符所在的位置,内容替换等。

二、static 关键字

Static是java的关键字,原意就是静止的意思。
1、作用
可以用来修饰方法,属性,内部类。

2、修饰属性

被static修饰的属性称为静态变量,也有的称为“全局变量”,java不存在全局变量的概念,全局变量的概念是在面向过程的语言中才有的。
private String name;
public static String country = “中国”;
被static修饰的属性,它的值存在于方法区,而堆区中的对象有对方法区中字节码的引用,所以可以使用到这份静态变量。静态变量属于类所有,成员变量属于对象所有,使用静态变量一般都通过类名来使用。另外,通过对象也可以使用静态变量,但不建议这样做。

System.out.println(person1.introduce()+" 是"+Person.country+"人");

3、修饰方法

被static修饰的方法称为静态方法,该方法就只能用类名进行调用。比如lang包中的Math类中所有的方法都是静态方法。静态方法属于类所有,不属于对象。成员方法属于对象。

public static void sayCountry(){
System.out.println("我们都是中国人");}Person.sayCountry();//通过类名调用静态方法

如果一个方法与类的对象没有任何关联,就可以定义为静态的,一些很常用的方法且与对象没有关联都会定义为静态方法。静态方法与对象没有任何关系,在静态方法中不能使用成员变量,也不能调用非静态方法,只能使用静态变量,只能调用静态方法。

public static void sayCountry(){
System.out.println("我们都是中国人"); //System.out.println(name);//不能用成员变量 System.out.println(country);//可以用 //this.introduce();//不能调用 test();//可以调用}

三、Arrays类

java.util.Arrays
该类包含用于操作数组的各种方法(如排序和搜索)。 该类还包含一个静态工厂,可以将数组视为列表。
1、该类中的所有的方法都是静态方法,在使用它时要通过类名来调用方法。
2、它的构造方法是私有的,私有构造方法不可以在类的外部创建对象。公共的无此限制。
private Arrays() {}
3、该类的功能都是对数组对象做各种处理,一般包括排序,搜索数组中元素,复制数组等,把数组转换成List集合。
(1)数组转集合

public static 
List
asList(T... a)

参数为返回值都使用了泛型,给它什么类型的数组就返回包含什么类型元素的集合.

(2)在数组中查找指定的元素

public static int binarySearch(int[] a, int key)

使用二叉搜索算法搜索指定的int数组的指定值。 在进行此调用之前,必须对数组进行排序(如sort(int[])方法)。 如果没有排序,结果是未定义的。 如果数组包含具有指定值的多个元素,则不能保证将找到哪个元素。

(3)对数组进行排序

public static void sort(int[] a)

按照数字顺序排列指定的数组。

(4)复制数组

public static int[] copyOf(int[] original,                           int newLength)

复制数组

四、Math类

java.lang.Math
1、包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。类似这样的工具
类,其所有方法均为静态方法,并且不会创建对象,调用起来非常简单。
2、所有的方法很简单

转载地址:http://szzki.baihongyu.com/

你可能感兴趣的文章
Perl 精萃
查看>>
Perl 简介
查看>>
Perl 注释
查看>>
数据类型之标量
查看>>
调试 Perl 脚本
查看>>
增强的for循环语句
查看>>
方法的可变参数
查看>>
静态导入
查看>>
java 泛型
查看>>
控制结构
查看>>
标准输入输出
查看>>
运算符
查看>>
数据类型之列表与数组
查看>>
线程交互
查看>>
向脚本传递参数
查看>>
格式化输出
查看>>
重定向输入输出
查看>>
数据类型之哈希
查看>>
正则表达式
查看>>
线程池
查看>>