本文共 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 staticList 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、所有的方法很简单转载地址:https://blog.csdn.net/qq_45442483/article/details/109725828 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!