黑马程序员——java小结_002_String类
来源:互联网 发布:淘宝买家钻石等级 编辑:程序博客网 时间:2024/06/09 13:59
------- android培训、java培训、期待与您交流! ----------
学C++的都对string类型熟悉无比,但是当接触到java中的string类型时,又会觉得无比陌生和别扭。
从概念上讲,java的字符串就是Unicode字符序列。java没有内置的字符串类型,而是在标准java类库中提供了一个预定义类,顺道称之为string,每个用双引号括起来的字符串都是string的一个实例。
在C程序员第一次接触java字符串的时候,必定会迷惑的,因为在c里面字符串其实就是字符数组。这是错误的其实java中的字符串更像是cahr*指针
char* string= "string"
其实java中的string类隐含了一个属性——final,也就是说string类不可修改。
当然java中String类本就没有提供用于修改字符串的方法。
例如String s = "abc";
java中的String类型一旦初始化就不可改变,例如string s= "abc",先在栈中创建一个对String类的对象引用变量s,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令str指向”abc,
如果已经有”abc” 则直接令s指向“abc, 且这个地址是固定的,同样也就意味着指向这个地址的string对象永远是“abc”;
但这不意味着java无法修改,string的修改机制是将里面的内容提取出来——修改——再存到一个新的地址——将原来的对象指向这个新的内存地址,
这样让string达到修改的目的,但是原来的“abc”依然还在原来的内存地址上,没有消失 也没有修改。
举个例子:
String s = new String("abc");
String s = "abc";
两种的形式来创建,第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。而第二种是先在栈中创建一个对String类的对象引用变量s,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令s指向”abc”,如果已经有”abc” 则直接令s指向“abc”。
比较类里面的数值是否相等时,用equals()方法;当测试两个包装类的引用是否指向同一个对象时,用==,下面用例子说明上面的理论。
<span style="font-size:14px;">String s1 = "abc"; String s2 = "abc"; System.out.println(s1==s2); //true </span>
可以看出s1和s2是指向同一个对象的。
<span style="font-size:14px;">String s1 =new String ("abc"); String s2 =new String ("abc"); System.out.println(s1==s2); // false </span>
用new的方式是生成不同的对象。每一次生成一个。
这样做是否会降低效率呢?(效率就是¥)
答案是:也对,也不对。
诚然,修改一个代码单元要比创建一个新的字符串更加有效,但是java中不可变的字符串有一个有点:字符串共享。
这要提到一个观点,java设计师认为共享带来的效率提高远远大于提取,拼接字符串所带来的低效率。
作为从c转过来的程序员来说,这就仁者见仁智者见智,但不可否认在某些情况下这是正确的。
------- android培训、java培训、期待与您交流! ----------
- 黑马程序员——java小结_002_String类
- 黑马程序员——java基础小结
- 黑马程序员——java小结_011_synchronized
- 黑马程序员—线程小结
- 黑马程序员—String 小结
- 黑马程序员——Java的IO流小结
- 黑马程序员——java基础之内部类小结
- 黑马程序员——Java基础之集合框架小结
- 黑马程序员——java基础学习(数据类型小结)
- 黑马程序员 【】java学习之路——枚举小结
- 黑马程序员——java小结_001_byte字节
- 黑马程序员——java小结_003_堆和栈
- 黑马程序员——java小结_009 _异常
- 黑马程序员——java小结_010_进程和线程
- 黑马程序员——java小结_012_ Collection
- 黑马程序员 【】java学习之路——代理小结
- 黑马程序员——java小结_014_map集合的输出
- 黑马程序员—java基础语法(小结)
- 可以学习的计算机书籍
- json的简单介绍
- Codeforces Round #265 (Div. 1) A
- 嵌入式C51编程规范
- 【ACdream】1070 神奇的%系列二
- 黑马程序员——java小结_002_String类
- Mark-and-Sweep Garbage Collection
- zoj 3818 Pretty Poem (模拟)
- Navicat for mysql 远程连接 mySql数据库10061错误问题
- Java编程思想(九) —— 持有对象(下)
- 8.7-硬币组合
- UVALive 5792 Diccionário Portuñol(字典树)
- C# dataGridView控件中加入comboBox控件及注意事项
- 利用队列和定时器构造的一种日志记录模型实现