第七天-Java常用类之一
来源:互联网 发布:android apk安装源码 编辑:程序博客网 时间:2024/05/25 23:58
1 String类的概述和使用
1.1 多个字符组成的一串数据 可以和字符数组进行相互转换。1.2 字符串的特点 1 字符串一旦被赋值,就不能改变。 注意:这里指的是字符串的内容不能改变,而不是引用不能改变。 2 字面值作为字符串对象和通过构造方法创建对象的不同 String ss = new String("hello");和String sss = "hello"的区别? System.out.println(ss==sss); false System.out.println(ss.equals(sss)); true 前者会创建两个对象(堆和字符串常量池),后者创建一个对象,在字符串常量池中 1.3 字符串题 1 ==和equals() String s1 = new String("hello"); String s2 = new String("hello"); System.out.println(s1 == s2);// false System.out.println(s1.equals(s2));// true String s3 = new String("hello"); String s4 = "hello"; System.out.println(s3 == s4);// false System.out.println(s3.equals(s4));// true String s5 = "hello"; String s6 = "hello"; System.out.println(s5 == s6);// true System.out.println(s5.equals(s6));// true 2 字符串的拼接 String s1 = "hello"; String s2 = "world"; String s3 = "helloworld"; System.out.println(s3 == s1 + s2);// false System.out.println(s3.equals((s1 + s2)));// true System.out.println(s3 == "hello" + "world");// true System.out.println(s3.equals("hello" + "world"));// true 字符串如果是变量相加,先开空间再拼接。 字符串如果是常量相加,先加,然后再到字符串常量池找,如果有就返回,没有则创建。1.4 字符串的功能 1 判断功能 boolean equals(Object obj) 判断字符串是否相等 JDK String类该方法的源码 public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; // 获取比较字符数组的长度 // 比较长度 如果长度不一致,则返回false 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; } boolean equalsIgnoreCase(String str) 忽略大小写,判断是否相等 boolean contains(String str) 是否包含该字符串 boolean startsWith(String str) 是否以该字符串开始 boolean endsWith(String str) 是否以该字符串结束 boolean isEmpty() 是否为空 2 获取功能 int length() 字符串长度 char charAt(int index) 下标为index的字符是什么 int indexOf(int ch) 某字符的下标,没有返回-1 int indexOf(String str) 查找某子串 int indexOf(int ch,int fromIndex) 从某个位置开始查找字符的位置 int indexOf(String str,int fromIndex) 从某个位置开始查找字符的位置 String substring(int start) 从start开始截取 String substring(int start,int end)从start开始截取end-start个字符 3 转换功能 byte[] getBytes() 转换成字节数组 char[] toCharArray() 将字符串转换为字符数组 static String valueOf(char[] chs) 将字符数组转换为字符串 static String valueOf(int i) 将整型转为字符串 String toLowerCase() 将字符串转成小写 String toUpperCase() 将字符串转成大写 String concat(String str) 字符串拼接 4 其他功能 1:替换功能 String replace(char old,char new) 替换字符 String replace(String old,String new) 替换字符串 2:去空格功能 String trim() 去掉首尾空格 3:按字典比较功能 源码: System.out.println("Hello".compareTo("Hel"));//2 int compareTo(String str) 比较字符串 public int compareTo(String anotherString) { int len1 = value.length; // 当前字符串的长度 5 int len2 = anotherString.value.length;// 被比较字符串的长度 3 int lim = Math.min(len1, len2); // 3 char v1[] = value; // 'H','e','l','l','o' char v2[] = anotherString.value; 'H','e','l' int k = 0; while (k < lim) { // 0<3 char c1 = v1[k]; char c2 = v2[k]; if (c1 != c2) { return c1 - c2; } k++; } return len1 - len2; } int compareToIgnoreCase(String str) 比较字符串
2 StringBuffer
2.1 StringBuffer的常见功能
1:添加功能 StringBuffer insert(int offset, char c) 2:删除功能 StringBuffer delete(int start, int end) ; StringBuffer deleteCharAt(int index); 3:替换功能 StringBuffer replace(int start, int end, String str) ; 4:反转功能 StringBuffer reverse(); 5:截取功能 (注意返回值) String substring(int start); String substring(int start, int end);
2.2 StringBuffer的一些特有方法
1:String和StringBuffer相互转换 String -> StringBuffer new StringBuffer(String str) 构造方法 StringBuffer --> String toString()方法 2:字符串的拼接 StringBuffer append(); 3:把字符串反转 StringBuffer reverse(); 4:判断一个字符串是否对称 sb.equals(sb.reverse());
2.3 一些问题
1:String,StringBuffer,StringBuilder的区别是什么? String是不可变的,StringBuffer和StringBuilder是可变的 StringBuffer是同步的,数据安全,效率低的;StringBuilder是不同步的,数据不安全,效率高2:StringBuffer和数组的区别? StringBuffer是用于存储字符串,数组可存放不同的数组,但是必须是同一种数据类型。
2.4 注意:
String作为形式参数和StringBuffer作为形式参数。 String作为参数传递,效果和基本类型作为参数传递是一样的。 StringBuffer作为参数传递,会改变对应的值。 代码示例: public class TestStringBuffered { public static void main(String[] args) { StringBuffer s1 = new StringBuffer(); s1.append("Hello"); StringBuffer s2 = new StringBuffer(); s2.append("World"); System.out.println(s1 + "---" + s2);//Hello---World change(s1, s2); System.out.println(s1 + "---" + s2);//Hello---WorldWorld System.out.println("-------------"); String str1 = "Hello"; String str2 = "World"; System.out.println(str1 + "------" + str2);//Hello------World change(str1, str2); System.out.println(str1 + "------" + str2);//Hello------World } private static void change(String str1, String str2) { str1 = str2; str2 = str1 + str2; } private static void change(StringBuffer s1, StringBuffer s2) { s1 = s2; s2.append(s1); } }
3:Integer
3.1 -128到127之间的数据缓冲池问题
public class TestInteger { public static void main(String[] args) { Integer i1 = new Integer(127); Integer i2 = new Integer(127); System.out.println(i1==i2);//false System.out.println(i1.equals(i2));//true Integer i3 = new Integer(128); Integer i4 = new Integer(128); System.out.println(i3==i4);//false System.out.println(i3.equals(i4)); //true Integer i5 = 127 ; Integer i6 = 127 ; System.out.println(i5==i6); //false System.out.println(i5.equals(i6));//true Integer i7 = 128 ; Integer i8 = 128 ; System.out.println(i7==i8);//true System.out.println(i7.equals(i8));//true }}
Integer自动装箱的源码:
static final int low = -128; static final int high = 127; public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
4:Character
4.1 方法:
1:判断给定的字符是否是大写 boolean isUpperCase(char ch); 2:判断给定的字符是否是小写 boolean isLowerCase(char ch); 3:判断给定的字符是否是数字字符 boolean isDigit(char ch); 4:把给定的字符转成大写 char toUpperCase(char ch); 5:把给定的字符转成小写 char toLowerCase(char ch);
5 Object类
5.1 Object是类层次结构的根类,所有的类都直接或者间接的继承自Object类。
5.2 Object类的构造方法有一个,并且是无参构造
子类构造方法默认访问父类的构造是无参构造
5.3 方法:
1:toString() 返回对象的字符串表示,默认是由类的全路径+'@'+哈希值的十六进制表示。 即: getClass().getName() + '@' + Integer.toHexString(hashCode()) 一般子类都会重写该方法。 2:equals() 比较两个对象是否相同。默认情况下,比较的是地址值是否相同。 3:hashCode() 返回对象的哈希值 4:getClass() 返回对象的字节码文件对象 5:finalize() 用于垃圾回收,在不确定的时间 6:clone() 可以实现对象的克隆,包括成员变量的数据复制,但是它和两个引用指向同一个对象是有区别的。
5.4 思考
==和equals()的区别? 1:== 基本类型:比较的是值是否相同 引用类型:比较的是地址值是否相同 2:equals() 只能比较引用类型。默认情况下,比较的是地址值是否相同。
阅读全文
0 0
- 第七天-Java常用类之一
- java第七天 IO
- java第七天~~
- Java第七天
- Java学习第七天
- java学习第七天
- JAVA 学习第七天
- Java 基础 第七天
- JAVA基础第七天
- java基础第七天
- JAVA学习第七天
- java 第七天 排序
- java学习第七天
- Java第七天
- Java总结第七天
- java第七天
- JAVA学习第七天
- Java学习第七天
- 文章标题
- linux下MySQL数据库安装初始化
- Python对象 继承 多态 获取对象信息 类的属性
- -----找规律 ZOJ 3829-Known Notation
- 基于Spring Boot和Spring Cloud实现微服务架构学习
- 第七天-Java常用类之一
- 选弹球
- bzoj2405 数字 打表找规律
- 阿里巴巴智能操作系统YunOS 6 系统发布
- hdu 1950 Bridging signals
- Junit4注解@Test|@Before等使用
- JSP 页面重定向
- 【面经笔记】Bloom过滤器处理大规模问题
- 均值滤波代码 C代码