API介绍及String类基本知识小结
2018-03-23 20:31
302 查看
什么是JDK API?
API(applicationProgramming Interface,应用程序编程接口)就是一些已写好、可供直接调用的功能(在java语言中,这些功能以类的形式封装)
经常使用的有:字符串操作、集合操作、文件操作、输入输出操作、网络操作、多线程等等。
字符串
String是不可变对象
Java.lang.String使用了final修饰,不能被继承
字符串底层封装了字符数组及针对字符数组的操作算法
字符串一旦创建,对象永远无法改变,但字符串引用可以重新赋值
Java字符串中任何一个字符对应16位(两个字节)的定长Unicode编码
String常量池
Java为了提高性能,静态字符串(字面量/常量/常量连接的结果)在常量池中创建,并尽量使用同一个对象,重用静态字符串.
对于重复出现的字符串直接量,JVM会首先在常量池中查找,如果存在即返回该对象.
String在内存中采用Unicode编码,每个字符16位占用两个字节;任何一个字符(无论中文还是英文)都算1个char字符长度,占用两个字节.
StringBuilder封装可变的字符数组,对象创建后可以通过调用方法改变其封装的字符序列.
StringBuilder的很多方法的返回值均为StringBuilder类型,这些方法的返回语句均为:return this.
由于改变封装的字符序列后又返回了该对象的引用,所有可以连写。
StringBuilder是可变字符串。字符串的内容计算,建议采用StringBuilder实现,这样性能会好一些;
Java的字符串连接的过程是利用StringBuilder实现的
Strings=”AB” String s1=s+”DE” +1;
Strings1=new StringBuilder(s).append(“DE”).append(1).toString();
StringBuffer和StringBuilder
StringBuffer是线程安全的,同步处理的,性能稍慢
StringBuilder是非线程安全的,并发处理的,性能稍快
String常用API代码
String str1 = "Hello";
// 不会创建新的String对象,而是使用常量池中已有的"Hello".
String str2 = "Hello";
System.out.println(str1 == str2); // 输出:true
// 使用new关键字会创建新的String对象
String str3 = new String("Hello");
System.out.println(str1 == str3); // 输出:false
// 获取String对象的长度
System.out.println(str3.length()); // 输出:5
// 在一个字符串中检索另一个字符串
String str4 = "I can because i think i can";
int index = str4.indexOf("can");
System.out.println(index);// 输出:2
index = str4.lastIndexOf("can");
System.out.println(index); // 输出:24
index = str4.indexOf("can", 6);
System.out.println(index); // 输出:24
index = str4.indexOf("Can");
System.out.println(index);// 找不到返回 -1
// 在一个字符串中截取指定的字符串
String str5 = "http://www.oracle.com";
String subStr = str5.substring(11, 17);
System.out.println(subStr);// 返回:oracle
subStr = str5.substring(7);
System.out.println(subStr); // www.oracle.com
// 去掉两端unicode前32位的空白:空格、回车、换行、tab等
String str6 = " good man \n\r";
System.out.println(str6.trim()); // goodman
//返回指定位置的字符
String str7="hello world";
System.out.println(str7.charAt(1)); //e
//检测一个字符串是否以指定字符串开头或结尾
String str8="Thinking in Java";
System.out.println(str8.endsWith("Java"));//true
System.out.println(str8.startsWith("T")); //true
System.out.println(str8.startsWith("thinking"));//false
//测试StringBuilder的append方法
StringBuilder buf=new StringBuilder("Programming Language");
buf.append(" java").append(" php");
System.out.println(buf.toString()); //Programming Language java php
//测试StringBuilder的insert方法
StringBuilder buf1=new StringBuilder("javacppc#objective-c");
buf1.insert(9, "php");
System.out.println(buf1.toString());//javacppc#phpobjective-c
//测试StringBuilder的delete方法
StringBuilder buf2=new StringBuilder("javaoraclecppc#php");
buf2.delete(4, 4+6);
System.out.println(buf2.toString());//javacppc#php
//测试StringBuilder的replace方法
StringBuilder buf3=new StringBuilder("javaphp");
buf3.replace(0, 4, "ios");
System.out.println(buf3.toString());//[0,4)替换包头不包尾 iosphp
//测试StringBuilder的reverse方法
StringBuilder buf4=new StringBuilder("12345");
System.out.println(buf4.reverse().toString());//54321
//Stringbuilder里有char[] 16 不够每次会新建对象 长度增加为一倍+2 length()返回有效字符个数 eg:18
//capacity()容量,返回value数组的大小 16+18
StringBuilder buf5=new StringBuilder("123456789012345678");
System.out.println(buf5.length()); //18
System.out.println(buf5.capacity()); //16+18=34
String常见判断
String s0="abcd";
String s1="ab";
String s2="cd";
String s3=s1+s2;
String s4="ab"+"cd";
System.out.println(s0==s3);//false
System.out.println(s0==s4); //true
---------------------------------------------------------------------------------------------------------
/*
* String.intern():从池中取对象,有则返回无,无则有
* JDK1.7之前:将对象放入池中然后返回
* JDK1.7开始:定义引用指向堆中的对象然后返回引用
*/
String s1 = new String("A") + new String("A");
// 在堆中创建A与A对象,常量池A,堆中还有对象AA AA不在常量池中
System.out.println(s1);
String s2 = s1.intern();// 常量池里没有AA,创建AA放进常量池中,如果常量池有AA了,那么大家一起引用它
String s3 = "AA"; // 把s2的引用给s3
String s4 = "AA";
System.out.println(s2 == s3);// true
System.out.println(s1 == s4);// true
System.out.println(s1 == "AA");// true
----------------------------------------------------------------------------------------------------------
String s1="ABCD";
//在堆中创建了一个ABCD对象并把ABCD对象放进了常量池中;共2个对象
String s2=new String("AB")+new String("CD");
//在堆中创建了对象AB与CD及ABCD对象 但常量池只有AB与CD;共5个对象
String s3=s2.intern();//常量池有ABCD对象 把s1的引用给s3
System.out.println(s2==s3);//false
System.out.println(s3==s1); //true
-----------------------------------------------------------------------------------------------------------
String s1=new String("xy");
String sl1=s1.intern();//把s1常量池的引用给sl1
String s2="xy";//把s1常量池的引用给s2
System.out.println(s1==s2);//false;对象的引用和常量池的引用不一样
System.out.println(sl1==s2); //true
API(applicationProgramming Interface,应用程序编程接口)就是一些已写好、可供直接调用的功能(在java语言中,这些功能以类的形式封装)
经常使用的有:字符串操作、集合操作、文件操作、输入输出操作、网络操作、多线程等等。
字符串
String是不可变对象
Java.lang.String使用了final修饰,不能被继承
字符串底层封装了字符数组及针对字符数组的操作算法
字符串一旦创建,对象永远无法改变,但字符串引用可以重新赋值
Java字符串中任何一个字符对应16位(两个字节)的定长Unicode编码
String常量池
Java为了提高性能,静态字符串(字面量/常量/常量连接的结果)在常量池中创建,并尽量使用同一个对象,重用静态字符串.
对于重复出现的字符串直接量,JVM会首先在常量池中查找,如果存在即返回该对象.
String在内存中采用Unicode编码,每个字符16位占用两个字节;任何一个字符(无论中文还是英文)都算1个char字符长度,占用两个字节.
StringBuilder封装可变的字符数组,对象创建后可以通过调用方法改变其封装的字符序列.
StringBuilder的很多方法的返回值均为StringBuilder类型,这些方法的返回语句均为:return this.
由于改变封装的字符序列后又返回了该对象的引用,所有可以连写。
StringBuilder是可变字符串。字符串的内容计算,建议采用StringBuilder实现,这样性能会好一些;
Java的字符串连接的过程是利用StringBuilder实现的
Strings=”AB” String s1=s+”DE” +1;
Strings1=new StringBuilder(s).append(“DE”).append(1).toString();
StringBuffer和StringBuilder
StringBuffer是线程安全的,同步处理的,性能稍慢
StringBuilder是非线程安全的,并发处理的,性能稍快
String常用API代码
String str1 = "Hello";
// 不会创建新的String对象,而是使用常量池中已有的"Hello".
String str2 = "Hello";
System.out.println(str1 == str2); // 输出:true
// 使用new关键字会创建新的String对象
String str3 = new String("Hello");
System.out.println(str1 == str3); // 输出:false
// 获取String对象的长度
System.out.println(str3.length()); // 输出:5
// 在一个字符串中检索另一个字符串
String str4 = "I can because i think i can";
int index = str4.indexOf("can");
System.out.println(index);// 输出:2
index = str4.lastIndexOf("can");
System.out.println(index); // 输出:24
index = str4.indexOf("can", 6);
System.out.println(index); // 输出:24
index = str4.indexOf("Can");
System.out.println(index);// 找不到返回 -1
// 在一个字符串中截取指定的字符串
String str5 = "http://www.oracle.com";
String subStr = str5.substring(11, 17);
System.out.println(subStr);// 返回:oracle
subStr = str5.substring(7);
System.out.println(subStr); // www.oracle.com
// 去掉两端unicode前32位的空白:空格、回车、换行、tab等
String str6 = " good man \n\r";
System.out.println(str6.trim()); // goodman
//返回指定位置的字符
String str7="hello world";
System.out.println(str7.charAt(1)); //e
//检测一个字符串是否以指定字符串开头或结尾
String str8="Thinking in Java";
System.out.println(str8.endsWith("Java"));//true
System.out.println(str8.startsWith("T")); //true
System.out.println(str8.startsWith("thinking"));//false
//测试StringBuilder的append方法
StringBuilder buf=new StringBuilder("Programming Language");
buf.append(" java").append(" php");
System.out.println(buf.toString()); //Programming Language java php
//测试StringBuilder的insert方法
StringBuilder buf1=new StringBuilder("javacppc#objective-c");
buf1.insert(9, "php");
System.out.println(buf1.toString());//javacppc#phpobjective-c
//测试StringBuilder的delete方法
StringBuilder buf2=new StringBuilder("javaoraclecppc#php");
buf2.delete(4, 4+6);
System.out.println(buf2.toString());//javacppc#php
//测试StringBuilder的replace方法
StringBuilder buf3=new StringBuilder("javaphp");
buf3.replace(0, 4, "ios");
System.out.println(buf3.toString());//[0,4)替换包头不包尾 iosphp
//测试StringBuilder的reverse方法
StringBuilder buf4=new StringBuilder("12345");
System.out.println(buf4.reverse().toString());//54321
//Stringbuilder里有char[] 16 不够每次会新建对象 长度增加为一倍+2 length()返回有效字符个数 eg:18
//capacity()容量,返回value数组的大小 16+18
StringBuilder buf5=new StringBuilder("123456789012345678");
System.out.println(buf5.length()); //18
System.out.println(buf5.capacity()); //16+18=34
String常见判断
String s0="abcd";
String s1="ab";
String s2="cd";
String s3=s1+s2;
String s4="ab"+"cd";
System.out.println(s0==s3);//false
System.out.println(s0==s4); //true
---------------------------------------------------------------------------------------------------------
/*
* String.intern():从池中取对象,有则返回无,无则有
* JDK1.7之前:将对象放入池中然后返回
* JDK1.7开始:定义引用指向堆中的对象然后返回引用
*/
String s1 = new String("A") + new String("A");
// 在堆中创建A与A对象,常量池A,堆中还有对象AA AA不在常量池中
System.out.println(s1);
String s2 = s1.intern();// 常量池里没有AA,创建AA放进常量池中,如果常量池有AA了,那么大家一起引用它
String s3 = "AA"; // 把s2的引用给s3
String s4 = "AA";
System.out.println(s2 == s3);// true
System.out.println(s1 == s4);// true
System.out.println(s1 == "AA");// true
----------------------------------------------------------------------------------------------------------
String s1="ABCD";
//在堆中创建了一个ABCD对象并把ABCD对象放进了常量池中;共2个对象
String s2=new String("AB")+new String("CD");
//在堆中创建了对象AB与CD及ABCD对象 但常量池只有AB与CD;共5个对象
String s3=s2.intern();//常量池有ABCD对象 把s1的引用给s3
System.out.println(s2==s3);//false
System.out.println(s3==s1); //true
-----------------------------------------------------------------------------------------------------------
String s1=new String("xy");
String sl1=s1.intern();//把s1常量池的引用给sl1
String s2="xy";//把s1常量池的引用给s2
System.out.println(s1==s2);//false;对象的引用和常量池的引用不一样
System.out.println(sl1==s2); //true
相关文章推荐
- JPA基础知识----JPA 基本注解,JPA API
- SQL基本知识小结(转)
- sharepoint基本知识介绍
- 介绍的嵌入式软件开发的背景知识,基本逻辑和流程,基本名词、概念和理念
- 基础篇小结:来看源码吧~巩固之前的知识,顺便看看创建方块物品之类基本操作的具体做法
- CasperJS API介绍(2)-- CasperJS最基本API介绍
- 回顾JavaScript基础知识小结2-面向对象(介绍)
- 链表基本知识介绍
- javascript基本知识小结--命名空间,函数
- 包装类基本知识介绍
- xml基本知识介绍
- 九 Android基本知识介绍
- 反射学习1、反射机制的介绍和基本的API的使用
- Java集合框架的知识总结(1) 说明:先从整体介绍了Java集合框架包含的接口和类,然后总结了集合框架中的一些基本知识和关键点,并结合实例进行简单分析。 1、综述 所有集合类
- Qualcom QMI系列-基本知识介绍(转)
- Java API——RMIIO入门教程(1)基本介绍
- html5-基本知识小结及补充
- zabbix API基本使用方法介绍
- OPC基本知识介绍——什么是OPC
- ros talker listener主要基本api 介绍