java String 详解
1.java语言的字符串序列是通过字符串类实现的。java提供了3个字符串类:String类、StringBuilder类和StringBuffer类。String类是不变字符串,StringBuffer类和StringBuilder类是可变字符串,这3种字符串都是16位的Unicode字符序列,并且这3个类都被声明为final类,因此不能被继承。
2.字符串的比较:
程序代码:
public class Compare {
/**
* @param args
*/
public static void main(String[] args) {
String str1="Hello";
String str2="hello";
String str3=str1;
System.out.println("str1==str2="+(str1==str2));
System.out.println("str1==str3="+(str1==str3));
System.out.println("str1.equalsIgnoreCase(str2)="+str1.equalsIgnoreCase(str2));
// TODO Auto-generated method stub
}
}
运行结果: str1==str2=false//java语言中用“==”比较两个对象时,比较的是引用(地址)是否相等,
str1==str3=true//当两个引用指向同一个地址时,结果才为true
str1.equalsIgnoreCase(str2)=true//比较两个字符串是否相等时,使用equals()方法,
3.比较字符串大小不能使用 >、<、<=、>=但却可以使用!=,用不等号比较的是两个字符串内容是否相等。若比较字符串相等则得用str.equals(Object)方法,而==是进行数值比较,比较的是内存地址是否相等。
4.String对象的不变性:在java中一旦创建一个String对象,就不能对其内容进行改变,因此,java的String对象是一个不可变字符串。
5.程序代码:
public class Str {
/**
* @param args
*/
public static void main(String[] args) {
String str=new String("Hello,word!");
str.replace('o', 'A');//
str=str.substring(0,6).concat("Java");//输出str的0到第6个,不包括第6个,再在str后续接上Java
str.toUpperCase();//str的值并没有改变
System.out.println(str);
// TODO Auto-generated method stub
}
}
6.程序运行结果:Hello,Java
7.StringBuilder和StringBuffer类都表示可变字符串,即这两个对象的内容是可以修改的。
8.StringBuilder类中reverse()方法可以将字符串逆序排列
9.String类不支持运算符重载,但有个类外即“+”,运算符两边为数值时执行数学加法运算,当两边为字符型数据时进行字符串连接运算。
10.将一个整数、浮点数转换为字符串形式,方法str.valueOf(int index);
11.关于字符串String类的不变性,在被调函数中定义局部String类对象,再次进入时,String对象的值是否变了的问题,。
12.特殊的字符串赋值方式:String str="This is a string!"
13.java中String类的共享模式,实例代码:
public class Share {
/**
* java程序设计中的共享模式
* @param args
*/
public static void main(String[] args) {
String str1 = "李星华";
String str2 = "李星华";
String str3 = "李星华";
System.out.println("str1==str2:" + (str1 == str2));
System.out.println("str2==str3:" + (str2 == str3));
// TODO Auto-generated method stub
}
}
//运行结果:
//str1==str2:true
//str2==str3:true
//分析:在java中如果发赋值的第二个字符串的内容是一样的话 (如str1与str2的赋值内容一样),则不会重新生成一个新的空间,
//而是共享前一个对象空间中存放的字符串内容
14.关于引用传递的问题:
class Person {
int x = 0;
}
public class Demmo {
/**
* @param args
*/
public static void main(String[] args) {
Person pn = new Person();
pn.x = 30;
System.out.println("pn.x=" + pn.x);
fun(pn);
System.out.println("pn.x=" + pn.x);
String str = "莫勒先生";
fun1(str);
System.out.println("str=" + str);
String ss="A";//开发中应该避免下面的写法:
for(int i=0;i<100;i++)
{
ss+=i;
}//这样虽然也可以运行,但是指向内存空间的引用的指向每次都必须改变,而且每次都得开辟新的内存空间,
//这样造成效率比较低,遇到这种情况可以使用StringBuffer代替
System.out.println("ss="+ss);
// TODO Auto-generated method stub
}
public static void fun1(String st) {
String ss;
ss = st + "李星华";
st = "李星华";
System.out.println("ss=" + ss);
}
public static void fun(Person pp) {
pp.x = 23;
}
}
// 运行结果:
// pn.x=30
// pn.x=23
// str=莫勒先生
// 分析:调用函数fun()时将pn的引用传给pp,也就把pn引用所指向的空间交给了pp,pp对象对空间中x进行了修改,所以调用
// fun()函数以后,对对象中的x值进行修改,x的值发生改变
// 在调用fun1()函数时,将str的引用传递给st,此时,str与st指向同一个内存空间,在函数fun1()中赋值:"李星华"给st
// 这时就要符合"一夫一妻制原则",先断掉st的指向str指向的空间,然后指向"李星华"在堆内存中开辟的空间,此时,st
// 值的改变不影响,str指向的内存空间的值
from : http://blog.csdn.net/qq435757399/article/details/7037012
java String 详解的更多相关文章
- java String详解
创建字符串: 1. String(char a[]) char a[] = {'g','o','o','d'}; String str = new String(a); 2. String(char ...
- Java的String详解
Java的String详解 博客分类: Java javaStringString详解常用方法 Java的String类在开发时经常都会被使用到,由此可见String的重要性.经过这次认真仔细的学习 ...
- Java内部类详解
Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就 ...
- C++调用JAVA方法详解
C++调用JAVA方法详解 博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...
- Java虚拟机详解----JVM常见问题总结
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- [转] Java内部类详解
作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置 ...
- java 泛型详解(普通泛型、 通配符、 泛型接口)
java 泛型详解(普通泛型. 通配符. 泛型接口) JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为5.0.这说明Java已经有大幅度的变化.本文将讲解JDK5.0支持的新功能---- ...
- Java synchronized 详解
Java synchronized 详解 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 1.当两个并发线程访问同一个对象object ...
- Java 多线程详解(四)------生产者和消费者
Java 多线程详解(一)------概念的引入:http://www.cnblogs.com/ysocean/p/6882988.html Java 多线程详解(二)------如何创建进程和线程: ...
随机推荐
- 2016huasacm暑假集训训练三 G - 还是畅通工程
题目链接:http://acm.hust.edu.cn/vjudge/contest/123674#problem/G 这题和上一道题差不多,还更简单点,直接用prim算法就行,直接贴AC代码: im ...
- python单元测试unittest
单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也是很崩溃的事情.虽然会很快熟悉内容,但是修改和 调试将是一件痛苦的事情,如果你在修改了代码后出现问题的话,而 ...
- GET,POST — 简述
本文主要对GET与POST基本区别进行汇总并掌握,如有错误与遗漏之处,请指出. 文章出处:http://www.cnblogs.com/useryangtao/ 1. HTTP HTTP(即超文本传输 ...
- MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突(转载)
本文转载自:http://www.cnblogs.com/jpf-java/p/6013307.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这 ...
- slick for play 使用原生sql查询以及拼接sql
在play中用函数式框架slick来操作数据库是一件很爽的事情.但有时因为某些特殊场景又不得不用原生的sql了. 还好slick支持这种写法,可以看看slick官方文档,Slick Plain SQL ...
- 关于sed用法
sed处理流程 sed的处理流程,简化后是这样的: 1.读入新的一行内容到缓存空间: 2.从指定的操作指令中取出第一条指令,判断是否匹配pattern: 3.如果不匹配,则忽略后续的编辑命令,回到第2 ...
- ORM系列之二:EF(2)Code First
目录 1. Code First是什么? 2. Code First 简单示例 3. 数据存储 4. 迁移 Code First是什么 Code First 顾名思义就是先写代码,当然不是乱写,而是按 ...
- bash shell + python简单教程,让你的mac/linux终端灰起来~
前提条件:已经安装python,命令行支持bash 在bash_profile中添加 function ccolor { python /Users/xirtam/Documents/tools/cc ...
- cloudera learning5:Hadoop集群高级配置
HDFS-NameNode Tuning: dfs.namenode.handler.count: NameNode可开启的thread number,thread为从NameNode到DataNod ...
- 【待整理】MongoDB 数据集
MongoDB复制集原理 https://yq.aliyun.com/articles/64?spm=5176.100239.blogcont14692.15.XzCCrj MongoDB管理:如何优 ...