Java的String详解
Java的String类在开发时经常都会被使用到,由此可见String的重要性。经过这次认真仔细的学习了java的String类。发现了自己以前开发中对String使用的不足,特写此博客来记录自己对String的学习总结。
首先String不属于8种基本数据类型,String是一个对象。 因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。
String实际上是使用字符数组来存储的数据的。从源码可以清晰看到定义的字符数组。
String在java/lang包下面,java默认导入lang包,所以使用String类时不用导入。
1.创建方式
- String temp="apple";
- for(int i=0;i<1000;i++)
- {
- temp=temp+i;
- }
答案:1001个
- String temp=new String("apple")
- for(int i=0;i<1000;i++)
- {
- temp=temp+i;
- }
答案:1002个
- String ok="ok";
- String ok1=new String("ok");
- System.out.println(ok==ok1);//fasle
明显不是同一个对象,一个指向字符串常量池,一个指向new出来的堆内存块,new的字符串在编译期是无法确定的。所以输出false
- String ok="apple1";
- String ok1="apple"+1;
- System.out.println(ok==ok1);//true
编译期ok和ok1都是确定的,字符串都为apple1,所以ok和ok1都指向字符串常量池里的字符串apple1。指向同一个对象,所以为true.
- String ok="apple1";
- int temp=1;
- String ok1="apple"+temp;
- System.out.println(ok==ok1);//false
主要看ok和ok1能否在编译期确定,ok是确定的,放进并指向常量池,而ok1含有变量导致不确定,所以不是同一个对象.输出false
- String ok="apple1";
- final int temp=1;
- String ok1="apple"+temp;
- System.out.println(ok==ok1);//true
ok确定,加上final后使得ok1也在编译期能确定,所以输出true
- public static void main(String[] args) {
- String ok="apple1";
- final int temp=getTemp();
- String ok1="apple"+temp;
- System.out.println(ok==ok1);//false
- }
- public static int getTemp()
- {
- return 1;
- }
ok一样是确定的。而ok1不能确定,需要运行代码获得temp,所以不是同一个对象,输出false。
- String ok="apple";
- String ok1=new String("apple");
- System.out.println(ok==ok1);//false
- ok1=ok.intern();//获取常量池ok的引用
- System.out.println(ok==ok1);//true--指向同一个对象

例:char chars[]={'a','b'.'c'};
String s=new String(chars);
int len=s.length();
(2)charAt() 截取一个字符
例:char ch;
ch="abc".charAt(1); 返回'b'
byte[]bytes=ok.getBytes();
for(int i=0;i<bytes.length;i++)
System.out.println(bytes[i]);//输出字节数组,范围为-128---127
indexOf() 查找字符或者子串第一次出现的地方。
lastIndexOf() 查找字符或者子串是后一次出现的地方。
第二种是:String substring(int startIndex,int endIndex)
它有两种形式,第一种形式用一个字符在调用字符串中所有出现某个字符的地方进行替换,形式如下:
String replace(char original,char replacement)
例如:String s="Hello".replace('l','w');
第二种形式是用一个字符序列替换另一个字符序列,形式如下:
String replace(CharSequence original,CharSequence replacement)
(9)valueOf() 转换为字符串
(10)toLowerCase() 转换为小写
(11)toUpperCase() 转换为大写
Java的String详解的更多相关文章
- Java字符串String详解
1.String字符串 实例化String对象: (1)直接赋值,如:String str="hello"; (2)使用关键字 new,如:String str=new Strin ...
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
- Java 序列化Serializable详解
Java 序列化Serializable详解(附详细例子) Java 序列化Serializable详解(附详细例子) 1.什么是序列化和反序列化Serialization(序列化)是一种将对象以一连 ...
- 最新java数组的详解
java中HashMap详解 http://alex09.iteye.com/blog/539545 总结: 1.就像引用类型的数组一样,当我们把 Java 对象放入数组之时,并不是真正的把 Java ...
- JAVA IO 类库详解
JAVA IO类库详解 一.InputStream类 1.表示字节输入流的所有类的超类,是一个抽象类. 2.类的方法 方法 参数 功能详述 InputStream 构造方法 available 如果用 ...
- 【转】 java中HashMap详解
原文网址:http://blog.csdn.net/caihaijiang/article/details/6280251 java中HashMap详解 HashMap 和 HashSet 是 Jav ...
- JAVA命令参数详解
JAVA命令参数详解 JAVA命令详解 结构 说明 Java 和 OldJava JIT 选项 另请参阅 结构 java [ options ] class [ argument ... ] java ...
- Java 序列化Serializable详解(附详细例子)
Java 序列化Serializable详解(附详细例子) 1.什么是序列化和反序列化 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization ...
- java中HashMap详解(转)
java中HashMap详解 博客分类: JavaSE Java算法JDK编程生活 HashMap 和 HashSet 是 Java Collection Framework 的两个重要成 ...
随机推荐
- JS自动爆炸案例
学习到了: setTimeout函数的灵活运用. 案例实现讲解: 1.先定义一个全局的变量,赋值为null. 2.然后使用timeout调用bang函数,以达到自动自动调用函数的功能. 3.bang函 ...
- plsql 只能识别32位的oracle解决办法
http://www.cnblogs.com/ymj126/p/3712727.html#undefined
- 爬取千万淘宝商品的python脚本
import time import leveldb from urllib.parse import quote_plus import re import json import itertool ...
- 【WPF】动态设置Binding的ConverterParameter转换器参数
问题:XAML中,想要在一个Bingding语句中再次Bingding. Source="{Binding Path=Image,Converter={StaticResource UMat ...
- Codeforces 558C Amr and Chemistry 暴力 - -
点击打开链接 Amr and Chemistry time limit per test 1 second memory limit per test 256 megabytes input stan ...
- DataGridView使用技巧十一:DataGridView用户输入时,单元格输入值的设定
通过DataGridView.CellParsing事件可以设定用户输入的值.下面的示例:当输入英文文本内容的时候,立即被改变为大写.DataGridView.CellParsing在离开编辑的单元格 ...
- DataTable的AcceptChanges()和RejectChanges()方法
一.DataTable.AcceptChanges()方法 提交自上次调用AcceptChanges()方法以来对该表进行的所有更改.调用AcceptChanges()时,任何扔处于编辑模式的Data ...
- 什么是服务端渲染、客户端渲染、SPA、预渲染,看完这一篇就够了
服务端渲染(SSR) 简述: 又称为后端渲染,服务器端在返回html之前,在html特定的区域特定的符号里用数据填充,再给客户端,客户端只负责解析HTML. 鼠标右击点击查看源码时,页 ...
- EasyUI-datagrid中load,reload,loadData方法的区别
EasyUI比较常用,其中的datagrid比较复杂,它有其中有load,reload,loadData这三个方法,它们都有相同的功能,都是加载数据的,但又有区别. load方法,比如我已经定义一个d ...
- C++ 类的隐式转换
所谓类的隐式转换,就是将实参类型转成形参类型--如果不一致的话. 这个转换与基本类型转换不太一样,具体则是在形参类型的构造函数中使用实参类型的数据,从而构造出一个临时对象. 下面的代码,类Person ...