java中String的使用十分频繁,是我们要学习的重点,在说String之前,我们要知道堆跟栈的区别。

java中的数据类型分原生数据类型(primitived types)有八种(byte,char,boolean,int,short,float,double,long)跟包装类型(把原生数据类型包装起来)也是八种,有Byte,String,Boolean,Integer,Short,Float,Double,Long。其中原生数据类型全部存在栈中,包装类数据存在堆中。

栈的优点:

1、栈的存取速度快,差不多仅次于位于cpu内的寄存器;

2、数据可共享。

缺点:

1、存在栈中的数据大小与生存期必须是确定的,所以缺乏灵活性。

堆的优点:

1、可动态分配内存大小,生存期也不必事先告诉编译器;

2、java的垃圾回收会自动的回收不再使用的数据。

缺点:

1、由于在运行时动态分配内存,会导致存取速度变慢。

由于String类是final,所以其内容是不可改变的,这点很重要。由于程序可能要使用到大量的字符串,而字符串类的内容一旦创建将不能被改变,所以java中提供了字符串池(String pool)的机制,在里面存放字符串,可以避免重复创建相同内容的字符串。创建字符串可以采用字面赋值(eg:String str = "hello"; )和new方法(eg: String str = new String("hello");),当采用字面赋值时,首先会在String pool中查找是否存在"hello"这个对象,如果不存在,则在String pool中创建一个"hello"对象,然后将这个对象的地址返回来,赋给引用str,这样str会指向String pool中的这个"hello"字符串对象;如果存在则不创建任何对象,直接将String pool中的这个对象地址返回来,赋值给str引用;当采用String s = new String("hello");首先会在String pool中查找是否有"hello"字符串对象,有的话就不会在String pool中再去创建这个对象,直接在堆中创建一个"hello"字符串对象,然后将堆中的这个对象地址返回来,赋给s引用,这样s就指向堆中创建的字符串对象;如果没有,就会先在String pool中创建"hello"对象,然后再在堆中创建一个"hello"对象,最后将堆中的字符串对象的地址返回来并赋给s引用,此时s指向堆中所创建的字符串对象。

java中有一个特殊的类Object类,除了它,所有的类都直接或间接地继承它,Object类中定义了八个方法,其中一个是equals()方法,对于Object类的equals()方法来说,它是判断调用该方法的引用与传进来的引用是否相等,即地址是否一样,是否指向同一个对象,可等价于==,但String类重写(override)了改方法,使得该方法判断的是当前字符串与传进来的字符串的内容是否一致(不是判断引用)。所以对于String对象的相等性判断要使用equals()方法,而不适用"=="。

String是常量,其对象一旦创建完毕就无法改变,如果使用"+"拼接字符串,会生成新的String对象,而不是向原有对象追加内容。

Java之字符串学习的更多相关文章

  1. Java字符串学习

    Java中字符串是String类的实例,字符串也是对象,所以 Java将字符串作为对象进行管理 Java使用java.lang 包中的String类来创建字符串. 1.定义字符串: 使用 " ...

  2. Java程序员学习之路

    1. Java语言基础 谈到Java语 言基础学习的书籍,大家肯定会推荐Bruce Eckel的<Thinking in Java>.它是一本写的相当深刻的技术书籍,Java语言基础部分基 ...

  3. Java编程思想学习(十) 正则表达式

    正则表达式是一种强大的文本处理工具,使用正则表达式我们可以以编程的方法,构造复杂的文本模式,并且对输入的字符串进行搜索.在我看来,所谓正则表达式就是我们自己定义一些规则,然后就可以验证输入的字符串是不 ...

  4. java中字符串String 转 int(转)

    java中字符串String 转 int String -> int s="12345"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法 ...

  5. java:字符串的“+”运算

    今天在一篇博客里,意外的看到了一段关于java中对字符串的“+”运算的处理(博客原文:http://blog.csdn.net/yirentianran/article/details/2871417 ...

  6. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  7. java之jvm学习笔记十三(jvm基本结构)

    java之jvm学习笔记十三(jvm基本结构) 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让概念在你的脑子里变成 ...

  8. Java IO流学习总结八:Commons IO 2.5-IOUtils

    Java IO流学习总结八:Commons IO 2.5-IOUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/550519 ...

  9. Java编程风格学习(三)

    在上一篇的java编程风格学习(二)中我们学习了一些在Java编码过程中的格式规范,遵循这些规范毋庸置疑是我们的书写高质量代码的前提与基础.今天我们更进一步,一起来学习Java编程的命名规范,向着编写 ...

随机推荐

  1. JavaScript高级程序设计30.pdf

    第12章 DOM2和DOM3 DOM1级主要定义的是HTML和XML文档的底层结构.DOM2和DOM3则在这个结构的基础上引入了更多的交互能力,也支持更高级的XML特性 DOM2和DOM3级分为许多模 ...

  2. linux关于bashrc与profile的区别(转)

    转载自:http://www.cnblogs.com/hongzg1982/articles/2101792.html bashrc与profile的区别 要搞清bashrc与profile的区别,首 ...

  3. 转载:在Ubuntu系统下装Win7并引导双系统

    转载自http://blog.sina.com.cn/s/blog_9f6451990101blef.html 本人的系统原先是就单ubuntu系统,而且是未分区情况下自动安装的,现在又装了个wind ...

  4. [Ruby on Rails Issue] When Setting Sqlite version on the Gemfile, Show error "An error occurred while installing sqlite3 ",

    Issue: Gem files will remain installed in /tmp/bundler20140825-31835-p0c0p/sqlite3-1.3.9/gems/sqlite ...

  5. RDD.scala(源码)

    ---- map. --- flatMap.fliter.distinct.repartition.coalesce.sample.randomSplit.randomSampleWithRange. ...

  6. Linux程序设计(二)shell程序设计

    1. 管道和重定向 文件描述符0:一个程序的标准输入 文件描述符1:标准输出 文件描述符2:标准错误输出 >操作符:把标准输出重定向到一个文件. >>操作符:将输出内容附加到一个文件 ...

  7. liunx shell数字相加

    #!/bin/bash num1= num2= num3= #echo $($num1+$num2+$num3)#错误写法 echo $[$num1+$num2+$num3] echo $(($num ...

  8. 如何运用同余定理求余数【hdoj 1212 Big Number【大数求余数】】

    Big Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  9. 第一个小项目(天气预报软件)——称"酷狗天气"

    一.创建数据库和表 分析: 二.遍历全国省市县数据 分析: 三.显示天气信息 分析: 四.切换城市和手动更新天气 分析: 五.后台自动更新天气 分析:

  10. 征服 Redis + Jedis + Spring (三)—— 列表操作【转】

    一开始以为Spring下操作哈希表,列表,真就是那么土.恍惚间发现“stringRedisTemplate.opsForList()”的强大,抓紧时间恶补下. 相关链接: 征服 Redis 征服 Re ...