1.
Object类
Object 是类层次结构的根类。
每个类都使用 Object 作为超类(父类)。所有对象(包括数组)都实现这个类的方法。
1)public int hashCode():返回的是该对象的哈希码值,哈希码值他是通过哈希表(Hashtable)里面的哈希算法算出来的,可以理解为地址值(整数)
2)public final Class<> getClass():返回此Object正在运行的类:
public String getName()以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称
2.toString():返回该对象的字符串表示
该类如果没有重写toString()方法,那么打印出来的是地址值:包名.类名@16进制数据:地址值
想显示该类的成员变量的值,在该类里面重写Object中的toString()方法
3.public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。
equals:默认的比较的是地址值,
Object类中的原码:
判断此对象(当前类的对象this),obj实际的对象,判断对象是否相等
public boolean equals(Object obj) {
return (this == obj);
}
比较两个对象是否相等,看两个对象中的内容是否相同,就需要在Object类中去重写equals()方法!(shift+alt+s)
4 .String类型的概述:String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
字符串是常量,一旦被赋值,其值不能在改变!
常用的构造方法:
public String():无参构造
public String(byte[] bytes):将字节数组转换成字符串
public String(byte[] bytes,int offset,int length):将字节数组的一部分转换成字符串
public String(char[] value):将字符数组转换成字符串
public String(char[] value,int offset,int count):将字符数组的一部分转换成字符串
public String(String original):将一个常量转换字符串:String 是不可变的,所以无需使用此构造方法
数组中有没有length()? 字符串中有没有length()?
length:数组长度属性 :数组中不存在这个方法
字符串中有length():返回字符串长度
5.字符串的特点:
字符串一旦被赋值,其值不能在改变!
方法区:有一个内存区域:字符串常量池
如果我们创建一个字符串对象,给对象赋值,这个值会在常量池找,有的话,就返回,没有在常量池开辟空间.
6.
面试题:
String s1 = new String("hello");创建了几个对象
String s2 = "hello" ;创建了几个对象
s1创建了两个对象
s2创建了一个对象,直接指向常量池中的!
== 默认比较的是地址值
equals:默认的比较的是地址值,String类型底层已经重写了Object类中equals方法,比较的是内容是否相同!
6.2
字符串变量相加,先开辟空间,再相加
字符串常量相加,先相加,然后在常量池中,是否有这个值,有直接返回地址值,没有就创建
7. String类的获取功能:
int length():获取字符串的长度
char charAt(int index):返回指定索引处的字符!(重点)
int indexOf(int ch):返回回指定字符在此字符串中第一次出现处的索引(重点)
为什么这里的参数是int类型,而不是char类型
'a'和97 都代表'a'
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这个位置
8. 字符串的转换功能:(重点)
byte[] getBytes():将一个字符串转换字节数组
char[] toCharArray():(重点方法):将一个字符串转换成字符数组
static String valueOf(char[] chs):将字符数组转换成字符串
static String valueOf(int i):将int类型的数据转换字符串
注意:
String类中的valueOf方法可以将任何数据类型转换成String
String toLowerCase():将字符串转换成小写
String toUpperCase():将字符串转换成大写
String concat(String str):字符串拼接功能
Object 是类层次结构的根类。
每个类都使用 Object 作为超类(父类)。所有对象(包括数组)都实现这个类的方法。
1)public int hashCode():返回的是该对象的哈希码值,哈希码值他是通过哈希表(Hashtable)里面的哈希算法算出来的,可以理解为地址值(整数)
2)public final Class<> getClass():返回此Object正在运行的类:
public String getName()以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称
public class ObjectDemo {
public static void main(String[] args) {
Student s = new Student();
System.out.println(s);//org1.Student@4ffb06c9
System.out.println(s.hashCode());//1341851337 地址值
Student s2 = s;
System.out.println(s2.hashCode());//1341851337 地址值
Student s3 = new Student();
Class c = s3.getClass();
System.out.println(c);//class org1.Student 此Object正在运行的类
String str = c.getName();
System.out.println(str);// org1.Student student类的全名称路径
}
}
2.toString():返回该对象的字符串表示
该类如果没有重写toString()方法,那么打印出来的是地址值:包名.类名@16进制数据:地址值
想显示该类的成员变量的值,在该类里面重写Object中的toString()方法
@Override
public String toString() {
return "Student [age=" + age + ", name=" + name + "]";
}
public class STest {
public static void main(String[] args) {
Student s = new Student(22,"高圆圆");
System.out.println(s);
System.out.println(s.toString());//没有重写org2.Student@5e4c689e
System.out.println(s.toString());//重写之后 Student [age=22, name=高圆圆]
}
}
3.public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。
equals:默认的比较的是地址值,
Object类中的原码:
判断此对象(当前类的对象this),obj实际的对象,判断对象是否相等
public boolean equals(Object obj) {
return (this == obj);
}
比较两个对象是否相等,看两个对象中的内容是否相同,就需要在Object类中去重写equals()方法!(shift+alt+s)
@Override
public String toString() {
return "Student [age=" + age + ", name=" + name + "]";
}
public class STest {
public static void main(String[] args) {
Student s = new Student(22,"高圆圆");
System.out.println(s);
System.out.println(s.toString());//没有重写org2.Student@5e4c689e
System.out.println(s.toString());//重写之后 Student [age=22, name=高圆圆]
}
}
4 .String类型的概述:String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
字符串是常量,一旦被赋值,其值不能在改变!
常用的构造方法:
public String():无参构造
public String(byte[] bytes):将字节数组转换成字符串
public String(byte[] bytes,int offset,int length):将字节数组的一部分转换成字符串
public String(char[] value):将字符数组转换成字符串
public String(char[] value,int offset,int count):将字符数组的一部分转换成字符串
public String(String original):将一个常量转换字符串:String 是不可变的,所以无需使用此构造方法
数组中有没有length()? 字符串中有没有length()?
length:数组长度属性 :数组中不存在这个方法
字符串中有length():返回字符串长度
public class StringDemo {
public static void main(String[] args) {
//无参构造:
String s = new String() ;
System.out.println(s);//空字符序列
System.out.println(s.length());//0
System.out.println("-----------------------");
//public String(byte[] bytes):将字节数组转换成字符串
//构造一个字节数组,静态初始化
byte[] bys = {97,98,99,100,101} ;//abcde
String s2 = new String(bys) ;
System.out.println(s2);
System.out.println(s2.length());//5
//public String(byte[] bytes,int offset,int length):将字节数组的一部分转换成字符串
String s3 = new String(bys, 0, 3) ;
System.out.println(s3);//abc
System.out.println(s3.length());
System.out.println("-------------------------");
//创建一个字符数组
char[] ch = {'a','b','c','d','e','爱','高','圆','圆'} ;
//public String(char[] value):将字符数组转换成字符串
String s4 = new String(ch) ;
System.out.println(s4);
System.out.println(s4.length());
System.out.println("-------------------------");
// public String(char[] value,int offset,int count):将字符数组的一部分转换成字符串:char[] value,int index,int length
String s5 = new String(ch, 5, 4) ;//爱高圆圆
System.out.println(s5);
System.out.println(s5.length());
//public String(String original):将一个常量转换字符串:由于String 是不可变的,所以无需使用此构造方法
String s6 = new String("hello") ;
System.out.println(s6);
System.out.println(s6.length());
//创建字符串对象s6相当于 s7字符串对象的创建方式
String s7 = "hello" ;
System.out.println(s7);
System.out.println(s7.length());
5.字符串的特点:
字符串一旦被赋值,其值不能在改变!
方法区:有一个内存区域:字符串常量池
如果我们创建一个字符串对象,给对象赋值,这个值会在常量池找,有的话,就返回,没有在常量池开辟空间.
6.
面试题:
String s1 = new String("hello");创建了几个对象
String s2 = "hello" ;创建了几个对象
s1创建了两个对象
s2创建了一个对象,直接指向常量池中的!
== 默认比较的是地址值
equals:默认的比较的是地址值,String类型底层已经重写了Object类中equals方法,比较的是内容是否相同!
public class StringDemo {
public static void main(String[] args) {
//无参构造:
String s = new String() ;
System.out.println(s);//空字符序列
System.out.println(s.length());//0
System.out.println("-----------------------");
//public String(byte[] bytes):将字节数组转换成字符串
//构造一个字节数组,静态初始化
byte[] bys = {97,98,99,100,101} ;//abcde
String s2 = new String(bys) ;
System.out.println(s2);
System.out.println(s2.length());//5
//public String(byte[] bytes,int offset,int length):将字节数组的一部分转换成字符串
String s3 = new String(bys, 0, 3) ;
System.out.println(s3);//abc
System.out.println(s3.length());
System.out.println("-------------------------");
//创建一个字符数组
char[] ch = {'a','b','c','d','e','爱','高','圆','圆'} ;
//public String(char[] value):将字符数组转换成字符串
String s4 = new String(ch) ;
System.out.println(s4);
System.out.println(s4.length());
System.out.println("-------------------------");
// public String(char[] value,int offset,int count):将字符数组的一部分转换成字符串:char[] value,int index,int length
String s5 = new String(ch, 5, 4) ;//爱高圆圆
System.out.println(s5);
System.out.println(s5.length());
//public String(String original):将一个常量转换字符串:由于String 是不可变的,所以无需使用此构造方法
String s6 = new String("hello") ;
System.out.println(s6);
System.out.println(s6.length());
//创建字符串对象s6相当于 s7字符串对象的创建方式
String s7 = "hello" ;
System.out.println(s7);
System.out.println(s7.length());
6.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
7. String类的获取功能:
int length():获取字符串的长度
char charAt(int index):返回指定索引处的字符!(重点)
int indexOf(int ch):返回回指定字符在此字符串中第一次出现处的索引(重点)
为什么这里的参数是int类型,而不是char类型
'a'和97 都代表'a'
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这个位置
public static void main(String[] args) {
//定义一个字符串
String s = "helloworld" ;
//int length():获取字符串的长度
System.out.println(s.length());//10
//char charAt(int index):返回指定索引处的字符!
System.out.println(s.charAt(7)); //r
//int indexOf(int ch):返回回指定字符在此字符串中第一次出现处的索引
System.out.println(s.indexOf('l'));//2
System.out.println(s.indexOf('k'));//-1
// int indexOf(String str):返回指定字符串在此字符串第一次出现的索引!
System.out.println(s.indexOf("owo"));//4
//int indexOf(int ch,int fromIndex):返回此字符中从指定位置开始后第一次出现的索引
System.out.println(s.indexOf('l', 4));//8 L在4后第一次出现的索引
// String substring(int start):截取:从指定位置开始截取,默认截取到末尾:包含start这个索引
System.out.println(s.substring(5));// world
System.out.println(s.substring(0));// helloworld
//String substring(int start,int end):从指定位置开始截取到指定位置结束:包左(start这个索引),不包含end这个位置
System.out.println(s.subSequence(5, 9));//worl(包左不包右
}
}
8. 字符串的转换功能:(重点)
byte[] getBytes():将一个字符串转换字节数组
char[] toCharArray():(重点方法):将一个字符串转换成字符数组
static String valueOf(char[] chs):将字符数组转换成字符串
static String valueOf(int i):将int类型的数据转换字符串
注意:
String类中的valueOf方法可以将任何数据类型转换成String
String toLowerCase():将字符串转换成小写
String toUpperCase():将字符串转换成大写
String concat(String str):字符串拼接功能
public class Demo3 {
public static void main(String[] args) {
//定义一个字符串
String s = "JavaSE" ;
//byte[] getBytes():将一个字符串转换字节数组
byte[] bys = s.getBytes() ;
for(int x = 0 ; x < bys.length ;x++){
System.out.println(bys[x]);//74 94 118 97 83 69
}
//char[] toCharArray():(重点方法):将一个字符串转换成字符数组
char[] chs = s.toCharArray() ;// J a v a S E
for(int x = 0 ; x < chs.length ; x ++){
System.out.println(chs[x]);
}
//static String valueOf(char[] chs):将字符数组转换成字符串
String ss = String.valueOf(chs) ;//JavaSE
System.out.println(ss);
/*
* static String valueOf(int i):将int类型的数据转换字符串
注意:
String类中的valueOf方法可以将任何数据类型转换成String
* */
int i = 100 ;
String sss = String.valueOf(i) ;
System.out.println(sss);//"100"
// String toLowerCase():将字符串转换成小写
System.out.println("toLowerCase():" +s.toLowerCase());
System.out.println("toUpperCase():" +s.toUpperCase());
String s1 = "hello" ;
String s2 = "world" ;
String s4 = s1.concat(s2) ;//拼接
System.out.println("s4:"+s4);
}
}