———–android培训、java培训、java学习型技术博客、期待与您交流!————
1 Object类
Object类层次结构的根类,所有的类都直接或间接的继承自该类
Object类中常用的方法
public String toString()---//返回该对象的字符串表示
public final Class getClass()---返回的是字节码对象//反射时候用到
public boolean equals(Object obj)--指示其他某个对象是否与此对象“相等”。
protected void finalize()-----当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法
public int hashCode()----返回地址值
重要的方法:
---public String toString()
返回对象的字符串表达形式--getClass().getName() + '@' + Integer.toHexString(hashCode())
一般输出对象(s)的引用的时候,默认输出的都是该引用调用的toString()方法 (s.toString() )
一般都重写此方法。重写的时候,不用自己添加,快捷键Alt+Shift+s,然后点击toString()即可。
package importMethod;
class Persion// 定义一个Persion类
{
public String name;
public int age;
public Persion(String name, int age)// 带参数的构造方法
{
this.name = name;
this.age = age;
}
@Override
public String toString()//重写Object类的该方法
{
return "Persion [name=" + name + ", age=" + age + "]";
}
}
public class ObjectDemo
{
public static void main(String[] args)
{
Persion persion = new Persion("袁郎", 25);// 创建Persion对象
//System.out.println(persion);// 打印Persion对象(看结果)
// 输出的结果是:importMethod.Persion@56bf1a4a(说明给Persion类没有重写toString()方法)
System.out.println(persion);// 打印Persion对象(看结果)
//输出结果为:Persion [name=袁郎, age=25](因为Persion类重写了toString()方法)
}
}
---public boolean equals(Object obj)
==的作用
--比较基本类型,比较的是基本类型的值是否相同
--比较引用类型,比较的是引用类型的地址值是否相同
默认情况下Object的equals方法比较的是对象的地址值是否相同
所以如果要比较对象的值是否相同,需要重写equals方法,也不用手动添加,有快捷键
---对象 instanceof 类名(判断,该对象是否是该类的一个对象)
2 Scanner类的用法
用法:用于接受用户键入的数据
构造方法:--public Scanner(InputStream source)
Scanner in =new Scanner(System.in);
解释这个构造方法中的参数问题:
System类中有一个成员变量in,是静态修饰的:如下
public static final InputStream in;
所以:System.in调用后返回的是一个InputStream 字节输入流的对象(详情看IO流那一节)
Scanner类中的重要方法:
--public byte nextByte()//接受字节
--public int nextInt()//接受int类型
--public long nextLong()//接受long类型
--public float nextFloat()//接受float类型
--public double nextDouble()//接受double类型
--public short nextShort()//接受short类型
--public String nextLine()//接受String类型
package importMethod;
import java.util.Scanner;
public class ScannerDemo
{
private void mian()
{
Scanner in =new Scanner(System.in);//定义一个扫面器对象
System.out.println("请输入一个整数");
int a=in.nextInt();//接受数据
System.out.println("输入的数是:"+a);//输出数据
}
}
小问题----连续的先接受一个int在接受一个String时候在输入一个int值后,int值默认后边还有\n,此时 会\n当做String赋值
int i=sc.nextInt();String s=sc.nextLine();
解决方法;
---A在int值接受结束后再,重新定义一个Scanner 对象用于接受String
package importMethod;
import java.util.Scanner;
public class Scannerproblem
{
public static void main(String[] args)
{
Scanner s=new Scanner(System.in);
int a=s.nextInt();
Scanner i=new Scanner(System.in);//接受一个int类型的数据后,重新定义扫描器
String string=i.nextLine();//在接受一个String类型的数据
System.out.println(a);
System.out.println(string);
}
}
---B 把所有的数据都用字符串接受,然后要什么类型就转成什么类型(用到String类)
package importMethod;
import java.util.Scanner;
public class Scannerproblem
{
public static void main(String[] args)
{
Scanner i =new Scanner(System.in);
String s=i.nextLine();
//在接受一个String类型的数据,把所有数据都用String接受
//在输出的时候,需要什么类型,就转成什么类型
System.out.println(s.valueOf(s));
}
}
3 String类
构造方法:
A--String()
B--String(byte[] bytes) 把字节数组转成字符串
C--String(byte[] bytes, int index, int length)把字节数组的一部分转成字符串
D--String(char[] value) 把字符数组转成字符串
E--String(char[] value, int indexint count) 把字符数组的一部分转成字符串
F--String(String original) 把字符串转成字符串
package com.itheima;
/*
* 构造方法:
A--String()
B--String(byte[] bytes) 把字节数组转成字符串
C--String(byte[] bytes, int index, int length)把字节数组的一部分转成字符串
D--String(char[] value) 把字符数组转成字符串
E--String(char[] value, int indexint count) 把字符数组的一部分转成字符串
F--String(String original) 把字符串转成字符串
*/
public class string_Demo {
public static void main(String[] args) {
// A--String()
String s = new String();
System.out.println("s 对象的长度为:" + s.length());
// String(char[] value) 把字符数组转成字符串
char[] ch = new char[] { 'e', 'd', 'c', 'b', 'a' };
String bs = new String(ch);// 把字符数组转成字符串
String bs1 = new String(ch, 0, 2);// 把字符数组的一部分转成字符串
System.out.println(bs);
// String(String original) 把字符串转成字符串
System.out.println(new String(new String("赵云!")));// 把字符串转成字符串
}
}
字符串的特点:一但被赋值,它的值就不能被改变(但是字符对象的引用所指向的地址是可以改变的)
字符串的本质就是一个字符数组(数组的特点,长度是固定的)
例子:
String s="hello";
s+="world";
System.out.println(s);//输出的值是:helloworld
面试题1
String s=new String("hello")和String s1="hello"的区别?
s==s1(false)比较的是地址 s.equals(s1)(true)比较的是内容
画内存图可以解释
![这里写图片描述](https://img-blog.csdn.net/20150428103348930)
面试题2
String s1="hello"
String s2="world"
String s3="helloworld"
s3.equals(s1+s2)//true
s3==s1+s2//false 字符变量相加,先开空间在相加存储
s3=="hello"+"world"//true 字符常量相加,先相加,再在常量池中找如果有,就返回常量池的地址,否则在开空间,返回地址
String的方法(判断方法)
A--public boolean equals(Object anObject)
比较字符串的内容是否相同,区分大小写
B--public boolean equalsIgnoreCase(String anotherString)
按字典顺序比较两个字符串,不考虑大小写
C--public boolean contains(CharSequence s)
判断字符串中是否包含指定的字符
D--public boolean endsWith(String suffix)
判断是否是以指定的字符结尾
E--public boolean startsWith(String prefix,int toffset)
判断是否是以指定的字符开头
F--public boolean isEmpty()
判断字符串是否为空
String s=""
s.idEmpty()//结果为true
String s="null"
s.idEmpty()//这样写要报错,空对象,就是没有对象,没有对象就不能调用方法
package com.itheima;
/*String 的判断方法:
* A--public boolean equals(Object anObject)
比较字符串的内容是否相同,区分大小写
B--public boolean equalsIgnoreCase(String anotherString)
按字典顺序比较两个字符串,不考虑大小写
C--public boolean contains(CharSequence s)
判断字符串中是否包含指定的字符
D--public boolean endsWith(String suffix)
判断是否是以指定的字符结尾
E--public boolean startsWith(String prefix,int toffset)
判断是否是以指定的字符开头
F--public boolean isEmpty()
判断字符串是否为空
*/
public class string2 {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = "hello";
System.out.println(s1.equals(s2));// 结果为false,次方法比较大小写
System.out.println(s1.equalsIgnoreCase(s2));// 结果为true。次方法不区分大小写
System.out.println(s1.contains("ello"));//结果为true ,包含指定的字符
System.out.println(s1.startsWith("He"));//结果为true,以指定的字符开头
System.out.println(s1.endsWith("lo"));//结果为true,以指定的字符结尾
System.out.println(s1.isEmpty());//结果为false,字符串为空
}
}
String的方法(获取功能)
A--public int length()//返回字符串的长度
B--public char charAt(int index)//返回指定索引处的字符
C--public int indexOf(int ch)//返回指定字符在字符串中第一次出现的索引
D--public int indexOf(int ch,int fromIndex)
//获取ch这个字符在该字符串中的指定索引后第一次出现的索引
E--public int indexOf(String str,int fromIndex)
//获取str字符串在该字符串中从指定索引后第一次出现的索引
F--public int indexOf(String str)//获取指定字符串在字符串中第一次出现的索引
G--public String substring(int beginIndex)
//获取字串,从指定索引到结尾
H--public String substring(int beginIndex,int endIndex)
//获取字串,从beginIndex到endIndex(牢记,获取的字串包括左边,不包括右边)
package com.itheima;
/*
* A--public int length()//返回字符串的长度
B--public char charAt(int index)//返回指定索引处的字符
C--public int indexOf(int ch)//返回指定字符在字符串中第一次出现的索引
D--public int indexOf(int ch,int fromIndex)
//获取ch这个字符在该字符串中的指定索引后第一次出现的索引
E--public int indexOf(String str,int fromIndex)
//获取str字符串在该字符串中从指定索引后第一次出现的索引
F--public int indexOf(String str)//获取指定字符串在字符串中第一次出现的索引
G--public String substring(int beginIndex)
//获取字串,从指定索引到结尾
H--public String substring(int beginIndex,int endIndex)
//获取字串,从beginIndex到endIndex(牢记,获取的字串包括左边,不包括右边)
*/
public class String3 {
public static void main(String[] args) {
String s = "heallo,java";
System.out.println(s.length());// 返回字符串的长度
System.out.println("s字符串中,下标为2处的字符为:" + s.charAt(1));// 获取:下标为2处的字符
System.out.println(s.indexOf("jav"));// 返回指定字符在字符串中第一次出现的索引
System.out.println(s.indexOf("a", 3));// 获取ch这个字符在该字符串中的指定索引后第一次出现的索引
System.out.println(s.substring(2));// 结果为:allo,java--获取字串,从指定索引到结尾
System.out.println(s.substring(0, 3));// 结果为:hea---(牢记,获取的字串包括左边,不包括右边
}
}
String的遍历
通过A--public int length()方法和B--public char charAt(int index)方法可以遍历String
package com.itheima;
public class string4 {
public static void main(String[] args) {
String s="androd,java";
//字符串的遍历:两个方法的结合
/*
* 通过A--public int length()方法
* B--public char charAt(int index)方法可以遍历String
*/
for (int i = 0; i < s.length(); i++) {
System.out.println(s.charAt(i));
}
}
}
String的方法(转换功能)
byte[] getByteds()把字符串转成字节数组
char[] toCharArray()把字符串转成字符数组
static String copyValueOf(char[] chs)把字符数组转成字符串
static String valueOf(char[] chs)把字符数组转成字符串
static String valueOf(int i)基本类型,把基本类型转成字符串
String toLowerCase()把字符串转成小写
String toUpperCase()把字符串转成大写
String concat(String str)字符串拼接
package importMethod;
public class StringDemo
{
public static void main(String[] args)
{
/*
* String的方法(转换功能)
*
* byte[] getByteds()把字符串转成字节数组 char[] toCharArray()把字符串转成字符数组
*
* static String copyValueOf(char[] chs)把字符数组转成字符串 static String
* valueOf(char[] chs)把字符数组转成字符串 static String valueOf(int
* i)基本类型,把基本类型转成字符串
*
* String toLowerCase()把字符串转成小写 String toUpperCase()把字符串转成大写 String
* concat(String str)字符串拼接
*/
String s = "java-android";
byte[] bys = s.getBytes();// 把字符串转成字节数组
System.out.println("此数组bys的长度是:" + bys.length);
char[] ch = s.toCharArray();// 把字符串转成字符数组
System.out.println("此数组ch的长度是:" + ch.length);
char[] ch1 = new char[]
{ 'a', 'n', 'd', 'r', 'o', 'i', 'd' };
System.out.println(String.valueOf(ch1));// 把字符数组转成字符串
System.out.println(String.copyValueOf(ch1));// 把字符数组转成字符串
int a = 100;
System.out.println(String.valueOf(a));// 基本类型,把基本类型转成字符串
String string = "java AND android";
System.out.println(string.toUpperCase());// 把字符串转成大写---JAVA AND ANDROID
System.out.println(string.toLowerCase());// 把字符串转成小写---java and android
String s1 = "hello", s2 = "java";
System.out.println(s1.concat(s2));// 字符串拼接-----hellojava
}
}
copyValueOf(char[] chs)和 valueOf()的区别?
--copyValueOf(char[] chs)只把字符数组转成string
-- valueOf()可以把任意类型转成String
String的方法(替换功能)
A--public String replace(char oldChar,char newChar)
把字符串中所有oldChar的字符替换为newChar
B--public String replace(String oldChar,String newChar)
String trim()该方法是,去除字符串两端的空格
package importMethod;
/*
* A--public String replace(char oldChar,char newChar)
把字符串中所有oldChar的字符替换为newChar
B--public String replace(String oldChar,String newChar)
c--public String replace(CharSequence target,CharSequence replacement)
target - 要被替换的 char 值序列
replacement - char 值的替换序列
c---String trim()该方法是,去除字符串两端的空格
*/
public class string_tihuan
{
public static void main(String[] args)
{
String olds=" java_an droid ";
String news="hello";
System.out.println(olds.replace(olds, news));//结果----hello
System.out.println(olds.replace(news, olds));//结果--- java_an droid
System.out.println(news.replace("l", "mm"));//结果----hemmmmo
System.out.println(olds.trim());//结果为----java_an droid只能去除两端的空格
}
}
4
StringBuffer/StringBuilder
(1)字符串缓冲区类。
(2)String,StringBuffer/StringBuilder的区别?
A:String的字符串长度固定。而StringBuffer/StringBuilder的字符串长度是可以改变的。
B:StringBuffer是线程安全的,效率低。
StringBuilder是线程不安全的,效率高。
(3)构造方法:
A:StringBuffer sb = new StringBuffer();//没有参数的构造方法,其初始容量为16
B:StringBuffer sb = new StringBuffer(50);//带参数的,初始容量为指定的值
C:StringBuffer sb = new StringBuffer("hello");//初始容量为String.length()+16
(4)成员方法:
public int capacity()//获得理论值
public int length()//获得字符串中的实际长度
A:添加功能
append
StringBuffer操作后,如果返回的是StringBuffer类型,实质返回的是本身对象
StringBuffer sb=new StringBuffer();
StringBuffer s1=sb.append("hello");
StringBuffer s2=sb.apped("world");
s1==s2//true 返回的是true,说明s1和s2同一个对象
所以,可以改为,sb.append("hello").append("world");链式操作
public StringBuffer insert(int offset,char c)
在指定位置上插入字符,以前位置上的字符先后移动
B:删除功能
public StringBuffer delete(int start,int end)
删除从start到end的字符
public StringBuffer deleteCharAt(int index)
删除指定位置的字符
C:替换功能
public StringBuffer replace(int start,int end,String str)
把从[start,end)包左不包右的字符全部替换为str
D:截取功能
public String substring(int start)
public CharSequence subSequence(int start,int end)包左不包右
E:反转功能
public StringBuffer reverse()//"你爱我"----->“我爱你”
package importMethod;
/*
* public int capacity()//获得理论值
public int length()//获得字符串中的实际长度
A:添加功能
append
StringBuffer操作后,如果返回的是StringBuffer类型,实质返回的是本身对象
StringBuffer sb=new StringBuffer();
StringBuffer s1=sb.append("hello");
StringBuffer s2=sb.apped("world");
s1==s2//true 返回的是true,说明s1和s2同一个对象
所以,可以改为,sb.append("hello").append("world");链式操作
public StringBuffer insert(int offset,char c)
在指定位置上插入字符,以前位置上的字符先后移动
B:删除功能
public StringBuffer delete(int start,int end)
删除从start到end的字符(包左不包右)
public StringBuffer deleteCharAt(int index)
删除指定位置的字符
C:替换功能
public StringBuffer replace(int start,int end,String str)
把从[start,end)包左不包右的字符全部替换为str
D:截取功能
public String substring(int start)
public CharSequence subSequence(int start,int end)包左不包右
E:反转功能
public StringBuffer reverse()//"你爱我"----->“我爱你”
*/
public class stringBufferDemo
{
public static void main(String[] args)
{
StringBuffer sb = new StringBuffer("android_i am coming!");
System.out.println("字符串的实际长度为:" + sb.length() + " |加上16就是总容量: " + sb.capacity());
// 结果为:字符串的实际长度为:20 |加上16就是总容量: 36
StringBuffer sb1 = new StringBuffer();// 添加功能
sb1.append("android").append(" ").append("hello");
System.out.println(sb1);// 结果为:android hello
// 在指定位置上插入字符,以前位置上的字符先后移动
System.out.println(sb1.insert(2, 'M'));// 结果为:anMdroid hello
// 删除指定位置的字符
System.out.println(sb1.deleteCharAt(0));// 结果为:nMdroid hello
// 在指定位置上插入字符,以前位置上的字符先后移动
System.out.println(sb1.delete(0, 2));// 结果为:droid hello--注意:(包左不包右)
// 替换功能
System.out.println(sb1.replace(0, 2, "MH"));// 结果为:MHoid
// hello--注意:(包左不包右)
// 截取功能
System.out.println(sb1.substring(4));// 结果为:d hello
System.out.println("没有截取之前sb1为:" + sb1 + "截取之后为:" + sb1.substring(0, 4));// 结果为:MHoi
// 反转功能
System.out.println("没有翻转之前sb1为:" + sb1 + "翻转之后为:" + sb1.reverse());
// 结果为:没有翻转之前sb1为:MHoid hello翻转之后为:olleh dioHM
}
}
String和StringBuffer的相互转化:
String------->StringBuffer
String s="hello";
方式一: StringBuffer的构造方法
StringBuffer sb=new StringBuffer(s);
方式二: StringBuffer的append()方法
StringBuffer sb=new StringBuffer();
sd.append(s);//public StringBuffer append(String str)
StringBuffer------->string
StringBuffer sb=new StringBuffer(“hehe”);
方式一:String的构造方法
String s=new String(sb);
方式二:StringBuffer的toString()方法
String s=sb.toString();////public String toString()
———–android培训、java培训、java学习型技术博客、期待与您交流!————