黑马程序员——Java基础---String类、基本数据类型包装类

-------  android培训 java培训 、java学习型技术博客、期待与您交流! ----------

第一讲 String类

简述
String类是字符串的类类型,用于描述字符串事物,字符串是一个特殊的对象。 该类被final修饰,代表着该类不能有子类。也就是说String类
里面操作字符串的功能是不能被复写的。
一、String类自身的特点
  • 字符串是对象  
    • String s = new String();
    • String s1 = "";
上面两条语句等效。一般情况下第一种方式不多见,常用第二种方式。
String s1 = "abc"; s1是一个类类型变量,因为类类型变量一定指向对象,所以"abc"是一个对象。
  • 字符串最大的特点是一旦被初始化就不可以被改变。
String s1 = "abc";
s1 = "kk";
System.out.println(s1);
打印结果:kk
此时: 不是"abc"变化了,是s1变了。 s1先前指向"abc"这个对象,现在指向"kk"这个对象。
s1的内存地址变化了,但是"abc"对象的内容没有变化过。 这叫做一旦被初始化,就不会被改变。
  • s1和s2的区别 

此时:s1==s2结果是false,因为"abc"是一个对象,s2是一个new的新对象。
※s1与s2有什么区别呢?
String s2 = new String("abc"); // new是创建一个对象,"abc"是一个对象,所以s2在内存中有两个对象。
  s1在内存中有一个对象。 s2在内存中有两个对象。
原因: s1指向一个字符串,s3指向一个字符串。 因为"abc"这个对象已经在内存中存在了,作为字符串这种特殊的对象,
在常量池中存在的数据。 s3在初始化的时候发现"abc"已经在内存中存在了,它就不会再独立开辟空间了。因为再开辟
空间的话 会比较浪费空间,"abc"已经在内存中存在, 且不会被改变,就不需要再开辟空间来分配。
  • 为了节约内存,在字符串这个对象当中,只要字符串相同的话,那么s1和s3指向着同一个对象。
  • String类中的equals()方法
    • s1.equals(s2) 结果是true。  equals()方法:比较的是内存地址值。那么 s1,s2不相等,为什么equals后便相等了呢?
    • 因为:String类复写了Object类的equals()方法。复写完以后String类建立了自己对象独特的判断相同的内容。该方法用于判断字符串是否相同。s1和s2的内容都是"abc",所以结果为true。
  • 字符串在内存当中有一个常量池,池里面是个数组,里面存放的是'a','b','c'这样的字符。字符串是由字符组成,当你组成一个字符串"abc"时,会到常量池中找到a字符,b字符,c字符,拼成一个新的字符串对象,存放在数组当中。
二 、String类中的基本方法 
  • 获取
    • 字符串中包含的字符数,也就是字符串的长度。
      • int length();获取长度。
      • 数组也有长度,但是其length是属性,字符串也有长度,但是是靠方法来完成的。
    • 根据位置获取位置上的某个字符。
      • char charAt(int index);
    • 根据字符获取该字符在字符串中位置。
      • int indexOf(int ch);返回的是ch在字符串中第一次出现的位置。
      • int indexOf(int ch,int fromIndex);从fromIndex指定位置开始,获取ch在字符串中出现的位置。
      • int indexOf(String str);返回的是str在字符串中第一次出现的位置。 
      • int indexOf(String str,int fromIndex);从fromIndex指定位置开始,获取str在字符串中出现的位置。
      • int lastIndexOf(int ch);反向索引一个字符出现的位置。
 
  • 判断
    • 字符串中是否包含某一个子串。
      • boolean contains(str);
      • 特殊之处:indexOf(str):可以索引str第一次出现的位置,如果返回-1,
      • 表示该str不在字符串中,所以,也可以用于对指定字符串的判断是否包含。
      •  if(str.indexOf("aa")!=-1)
      •  而且该方法既可以判断又可以获取出现的位置。
      •  如果只为判断是否包含用contains(str);
      •  如果既要判断又要拿位置的话用indexOf(str);
    • 字符串中是否有内容。
      • boolean isEmpty();原理就是判断长度是否为0。
    • 字符串是否以指定内容开头。
      • boolean startsWith(str);
    • 字符串是否以指定内容结尾。
      • boolean endsWith(str);
    • 判断字符串内容是否相同。复写了Object类中的equals方法。
      • boolean equals(str);
    • 判断内容是否相同,并忽略大小写。
      • boolean equalsIgnoreCase();
 
  • 转换
    •  将字符数组转成字符串。
      • 构造函数:  
        •  String(char[]);
        •  String(char[],offest,count);将字符数组中的一部分转成字符串。
      • 静态方法:
        •  static String copyValueOf(char[]);
        •  static String copyValueOf(char[],int offest, int count);
        •  static String valueOf(char[]);
 
 
 
  • 将字符串转成字符数组。
    • char[] toCharArray(); 不需要参数的原因:对象就是字符串。里面用的是this。
  •  将字节数组转成字符串。
    •  String(byte[]);
    •  String(byte[],offest,count);将字节数组中的一部分转成字符串。
  •  将字符串转成字节数组。
    • byte[] getBytes();
  •  将基本数据类型转成字符串。
    • static String valueOf(int);
    • static String valueOf(double);
    • //3+"";//String.valueOf(3);字符串长度是1,里面是3
  • 特殊:字符串和字节数组在转换过程中是可以指定编码表的。但凡想做编码操作的时候,得把他变成字节数组才可以,字符不行。
  • 替换
    • String replace(oldchar,newchar);
    • String replace(CharSequence target,CharSequence replacemenr); 
  • 切割
    • String[] split(regex);
    • s.split(",")当中","作为切割点,是不会被包含在切割完的字符串部分的。

  • 子串,获取字符串中的一部分。
    • String substring(begin);
    • String substring(begin,end);
  • 转换,去除空格,比较
    • 将字符串转成大写或者小写。
      • String toUpperCase();
      • String toLowerCase();
    • 将字符串两端的多个空格去除。
      • String trim();
    • 对两个字符串进行自然顺序的比较。
      •  int compareTo(string);
      • 如果参数字符串等于此字符串,则返回值0,
      • 如果此字符串按字典顺序小于字符串参数,则返回负数,
      • 如果此字符串按字典顺序大于字符串参数,则返回正数。
  • 字符串为什么能忽略大小写比较?
    • 原理:把参与比较的字符串全都变小写,然后再用equals方法比较就可以了。
第二讲 StringBuffer 
简述
        StringBuffer 是一个容器,字符串的组成原理就是通过该类实现的。 StringBuffer 可以对字符串内容进行增删改查等操作,很多方法和 String 相同。当数据类型不确定,而且最终要变成字符串的时候,数据的个数不确定的时候缓冲区用起来是最方便的。
一、特点:
  1. 长度是可变化的。
  2. 可以直接操作多个数据类型。
  3. 最终会通过toString方法变成字符串。
二、常用方法
  • 存储
    • StringBuffer append():将指定数据作为参数添加到已有数据结尾处。返回原缓冲区对象
    • StringBuffer insert(index,数据):可以将数据插入到指定index位置。
输出结果说明sb和sb1指向同一个对象。
sb.append("abc").append(true).append(34); 
方法调用链:sb.append("abc")返回的是本类对象,所以还可以调用本类方法。
  • 删除
    • StringBuffer delete(start,end):删除缓冲区中的数据,包含start,不包含end。
    • StringBuffer deleteCharAt(index):删除指定位置的字符。
 

  • 获取
    • char charAt(int index) ;
    • int indexOf(String str) ;
    • int lastIndexOf(String str); 
    • int length() ;
    • String substring(int start, int end);** 返回是String类对象 。
  • 修改
    • StringBuffer replace(start,end,string);替换缓冲区中的数据,包含start,不包含end。
    • void setCharAt(int index, char ch) ; 替换缓冲区index位置上的字符。返回值类型不是StringBuffer,替换完不返回。
 
 
  • 反转
    • StringBuffer reverse();
  • 将缓冲区中指定数据存储到指定字符数组中
    • void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) ;包含srcBegin,不包含srcBegin。
三、JDK1.5 版本之后出现了StringBuilder.
  • StringBuffer是线程同步。有锁。效率低。
  • StringBuilder是线程不同步。无锁。效率高。
以后开发,建议使用 StringBuilder 。如遇多线程,使用 StringBuffer 或自己加锁。
升级三个因素:
  1. 提高效率。
  2. 简化书写。
  3. 提高安全性。  

第三讲 基本数据类型包装类 
 
简述
        按照Java面向对象的原则,Java将万事万物都视为对象。包括基本数据类型。一个int型有多种表现形式,怎么将一个十进制的int型,变成其他进制表现形式呢?这这变化整数自己最清楚,那么要把整数变成对象,里面如果定义了进制转换功能的话,这样指挥起整数就非常方便了。 将基本数据类型封装成对象的好处,在于可以在对象中定义更多的功能方法操作该数据。基本数据类型对象包装类的最常见作用,就是用于基本数据类型和字符串类型之间做转换。

一、基本数据类型对象包装类
基本数据类型      引用数据类型
byte                    Byte
short                   short
int                       Integer
long                    long
boolean              Boolean
float                    Float
double                Double
char                    Character

二、应用
  • 基本数据类型对象包装类的常见作用,就是用于基本数据类型和字符串类型之间做转换。
    • 基本数据类型转成字符串。 
      • 基本数据类型+""
      • 基本数据类型.toString(基本数据类型值);
      • 如:Integer.toString(34);//将34整数变成"34";
  • 字符串转成基本数据类型。
    • 静态调用方式:
      • 基本数据类型  基本数据类型值 = 基本数据类型对应的引用数据类型.parse基本数据类型(String);  
      • xxx a = Xxx.parseXxx(String);
例如:
int num = Integer.parseInt("123");
long x = long.parseInt("123");
double b = Double.parseDouble("123");
boolean b = Boolean.parseBoolean("false");
  • 对象调用方式:
    • Integer i = new Integer("123");
    • int num = i.intValue();
  • 十进制转成其他进制
    • toBinaryString(); 转成二进制。
    • toOctalString();  转成八进制。
    • toHexString();    转成十六进制。
  • 其他进制转成十进制。
    • parseInt(String radix); String,进制表现形式, radix,对应的进制。 
 
 
  • Integer类的equals方法:
    • Integer类复写了Object类里面的equals方法。建立了自己比较相同的特有方式,比较的是数值是否相同。
   
x==y:false 原因:x,y是两个对象。

三、JDK1.5版本以后出现的新特性, 自动装箱和自动拆箱
  • 示例:
    • Integer x = new Integer(4);
    • Integer x = 4;//自动装箱。// 4相当于 new Integer(4).; 
    • x= x/*x.intValue()*/ + 2;//x+2: 进行自动拆箱。将x变成了int类型和2进行了加法运算,再将和进行装箱赋给x。
  • 作用:简化书写,方便于运算。    
  • 注:Integer x 中x除了取整数值外 还多了一个值null。如果x要进行数据运算,先要判断值是否为null,如果值为空,就不能调用intVaule方法。 否则运行时会出现空指针异常。
 
当数值在byte范围内时(-128~127),对于新特性 ,如果该数值已经存在,则不会再开辟新的内存空间。
 



-------  android培训 java培训 、java学习型技术博客、期待与您交流! ----------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值