黑马程序员----java基础:String与StringBuffer及基本数据类型包装类
------- android培训、java培训、期待与您交流! ----------
java中一些基础类比如String、StringBuffer和基本数据类型包装类都是非常常见且使用非常频繁的类。这些类虽然简单,但是想要熟练使用也必须要学习,虽然API文档对这些类的用法都讲的比较详细,但是我觉得还是有必要再整理一下。
一、String类
1、概述
String就是字符串的意思,首先要明确一点的是String并不属于基本数据类型。
因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。
注意new String() 和 newString("")都是声明一个空的字符串而不是null。
字符串一旦被初始化就不可以被改变。
2、初始化
对象初始化格式String s = new String("abc");
----可以简写为String s = "abc";
3、字符串常量池
讲之前首先我们先来看一个例子
//例1
String s1 = “abc";
String s2 = "abc";
String s3 = "a" + "bc";
System.out.println(s1 == s2); // true
System.out.println(s1 == s3);// true //例2
String s1 = new String("abc");
String s2 = new String("abc");
String s3 = "a" + new String("bc");
System.out.println(s1==s2); //false
System.out.println(s2==s3); //false
运行这个2个例子的结果,我们会惊奇的发现例1和例2运行的结果竟然不同。上面不是说用new和不用new是一样的吗?
这里我们就要引入常量池的概念:常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。
Java会确保一个字符串常量只有一个拷贝。
因为例子中的s1和s2中的”abc”都是字符串常量,它们在编译期就被确定了,所以s1==s2为true;
用new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间。
4、常用方法
4.1、获取:
4.1.1 获取字符串中字符的个数(长度).
int length();
4.1.2 根据位置获取字符。
char charAt(int index);
4.1.3 根据字符获取在字符串中的第一次出现的位置.
int indexOf(int ch) ch为字符的Unicode编码
int indexOf(int ch,int fromIndex) 从指定位置进行ch的查找第一次出现位置
int indexOf(String str)根据字符串获取在字符串中的第一次出现的位置.
int indexOf(String str,int fromIndex)从fromIndex指定位置开始,获取str在字符串中出现的位置.
4.1.31反向索引,从后向前查找
int lastIndexOf(int ch)
int lastIndexOf(int ch,int fromIndex):从指定位置进行ch的查找第一次出现位置
int lastIndexOf(String str);
int lastIndexOf(String str,int fromIndex);
4.1.4 获取字符串子串。
String substring(int beginIndex, int endIndex)//包含begin 不包含end 。
String substring(int beginIndex);//从beiginIndex索引开始截取字符串。
4.2、转换
4.2.1 将字符串变成字符串数组
String[] split(String regex):涉及到正则表达式.
4.2.2 将字符串变成字符数组。
char[] toCharArray();
4.2.3 将字符串变成字节数组。
byte[] getBytes();
4.2.4 将字符串中的字母转成大小写。
String toUpperCase():大写
String toLowerCase():小写
4.2.5将字符串中的内容进行替换
String replace(char oldch,char newch);
String replace(String s1,String s2);
2.6 将字符串两端的空格去除。
String trim();
2.7 将字符串进行连接 。
String concat(string);
4.3、判断比较
4.3.1 两个字符串内容是否相同啊?
boolean equals(Object obj);
boolean equalsIgnoreCase(string str);忽略大写比较字符串内容。
4.3.2 字符串中是否包含指定字符串?
boolean contains(string str);
4.3.3 字符串是否以指定字符串开头。是否以指定字符串结尾。
boolean startsWith(string);
boolean endsWith(string);
二、StringBuffer类
1、概述
StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。
所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。
在StringBuffer类中存在很多和String类一样的方法,这些方法在功能上和String类中的功能是完全一样的。
但是有一个最显著的区别在于,对于StringBuffer对象的每次修改都会改变对象自身,这点是和String类最大的区别。
2、StirngBuffer初始化
StringBuffer对象的初始化不像String类的初始化一样,Java提供的有特殊的语法,而通常情况下一般使用构造方法进行初始化。
3、特点
a、长度的可变的。
b、可以存储不同类型数据。
c、最终要转成字符串进行使用。
d、可以对字符串进行修改。
4、常用方法
4.1添加:
StringBuffer append(data);//能够添加各种数据类型
StringBuffer insert(index,data); //在索引出插入各种类型
4.2删除:
StringBuffer delete(start,end):包含头,不包含尾。
StringBuffer deleteCharAt(int index):删除指定位置的元素
4.3查找:
char charAt(index); //在该索引出的char值
int codePointAt //索引处的字符
int indexOf(string); //
int lastIndexOf(string);
int capacity() //返回当前Buffer的容量(初始16)
int length() //长度
4.4修改:
StringBuffer replace(start,end,string);
void setCharAt(index,char);
StringBuffer reverse() 将此字符序列用其反转形式取代(String类中没有反转)
void trimToSize() 尝试减少用于字符序列的存储空间。
5、StringBuilder
jdk1.5以后出现了功能和StringBuffer一模一样的对象。就是StringBuilder
这里就不详细介绍了。注意一下它们的不同点就好了。
不同的是:
StringBuffer是线程同步的。通常用于多线程。
StringBuilder是线程不同步的。通常用于单线程。 它的出现提高效率。
三、基本数据类型包装类
1、概述
Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类。
2、对应关系
byte ——Byte
short ——Short
int ——Integer
long-----Long
float-----Float
double----Double
char----Character
boolean---Boolean
3、Integer类内部的常用方法
事实上这几种数据类型包装内是比较相似,我只以Integer为例简单介绍一下。
a、parseInt方法
//将数字字符串转换为int数值。 String s = “123”; int n = Integer.parseInt(s);
//将字符串”120”按照十进制转换为int,则结果为120 int n = Integer.parseInt(“120”,10);
//将字符串”12”按照十六进制转换为int,则结果为18 int n = Integer.parseInt(“12”,16);
//将字符串”ff”按照十六进制转换为int,则结果为255 int n = Integer.parseInt(“ff”,16);
b、int转字符串
可以直接用+号连接,也可以用toString函数。
//将int类型转换为对应的String类型。 int m = 1000; String s = Integer.toString(m);
c、十进制转成其他进制。
toBinaryString();
toHexString();
toOctalString();
四、最后
即使是简单的东西,我们也要把它重视起来,坚持每天进步一点点,最后我们就是成功的。
黑马程序员----java基础:String与StringBuffer及基本数据类型包装类的更多相关文章
- 黑马程序猿——15,String,StringBuffer,基本数据类型包装对象
------<ahref="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培 ...
- 黑马程序员——JAVA基础之String和StringBuffer
------- android培训.java培训.期待与您交流! ---------- String类: 字符串是一个特殊的对象. 字符串一旦初始化就不可以被改变. String str = &quo ...
- 黑马程序员----java基础笔记中(毕向东)
<p>------<a href="http://www.itheima.com" target="blank">Java培训.Andr ...
- 黑马程序员Java基础班+就业班课程笔记全发布(持续更新)
正在黑马学习,整理了一些课程知识点和比较重要的内容分享给大家,也是给自己拓宽一些视野,仅供大家交流学习,大家有什么更好的内容可以发给我 ,现有黑马教程2000G QQ 1481135711 这是我总 ...
- 黑马程序员----java基础笔记上(毕向东)
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 笔记一共记录了毕向东的java基础的25天课程,分上.中.下 本片为上篇,涵盖前10天课程 1. ...
- 黑马程序员——JAVA基础之反射
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- Java 反射是Java语言的一个很重要的特征,它使得Java具体了"动态 ...
- 黑马程序员——JAVA基础之泛型和通配符
------- android培训.java培训.期待与您交流! ---------- 泛型: JDK1.5版本以后出现新特性.用于解决安全问题,是一个类型安全机制. 泛型好处: ...
- 黑马程序员——JAVA基础之简述面向对象,类,变量,匿名对象
------- android培训.java培训.期待与您交流! ---------- 面向对象: 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程 强调的是功能行为 面向对象 将 ...
- 黑马程序员——JAVA基础之语法、命名规则
------- android培训.java培训.期待与您交流! ---------- 1.java语言组成:关键字,标识符,注释,常量和变量,运算符,语句,函数,数组. 2.java关键字:被Jav ...
随机推荐
- Linux中的mysql.redis
1,Linux上的mysql MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可. 开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源 ...
- putty字体大小颜色、全屏/退出全屏快捷键 保存session设置[转]
字体大小设置 Window->Appearance->Font settings->Change按钮设置(我的设置为16)字体为(Consolas) 字体颜色设置 Window-&g ...
- 关于wireshark
1 对https进行抓包,或者说抓包经过了ssl加密的包 只要有rsa private key就可以了. https://wiki.wireshark.org/SSL 2 对浏览器访问的https的网 ...
- 浏览器同部署了https的服务器交互的过程
1 浏览器发起https请求 2 https服务器发送自己的公钥给浏览器 3 浏览器用https服务器发送过来的公钥加密一个用于双方通信的的对称密码 4 https服务器用自己的私钥解密,获取对称密码 ...
- 内存转储文件 Memory.dmp
https://baike.sogou.com/v63435711.htm?fromTitle=内存转存文件 内存转储是用于系统崩溃时,将内存中的数据转储保存在转储文件中,供给有关人员进行排错分析用途 ...
- 20170212-备份ABAP程序
把生产机上所有后续开发的CBO程序都备份下来.以备急用! 用过2种方法:1.写BDC程序,模拟 TCODE:SE38 -->Program --> Utilities(M)-->Mo ...
- linux多线程编程入门
背景知识: 在前一个实训中我们介绍了进程,但有时人们认为用fork调用来创建新进程的代价太高.在这种情况下,如果能让一个进程同时做零件事情或至少看起来是这样将会非常有用.而且,你可能希望能有两件或更多 ...
- What's the difference between HEAD, working tree and index, in Git?
What's the difference between HEAD, working tree and index, in Git?
- 并不对劲的bzoj4652:loj2085:uoj221:p1587:[NOI2016]循环之美
题目大意 对于已知的十进制数\(n\)和\(m\),在\(k\)进制下,有多少个数值上互不相等的纯循环小数,可以用\(x/y\)表示,其中 \(1\leq x\leq n,1\leq y\leq m\ ...
- JS事件流与DOM事件处理程序
在Javascript的DOM中,关于事件Event对象的知识是一定要掌握的.Event对象模型主要分为两个部分,一个是Event对象本身具有的属性和方法,这个参照API就可以学得:另一个是在DOM节 ...