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. Android webView 正确的用法

    Android webView 正确的用法 引言: 我在网络找了几个例子,基本上都有问题,<Android疯狂讲义>13.4中的源代码也有问题.终于在官网找到正确的用法.点我. 基本用法: ...

  2. usaco 土地并购 && hdu 玩具装箱

    土地并购: Description 约翰准备扩大他的农场,眼前他正在考虑购买N块长方形的土地.如果约翰单买一块土地,价格就是土地的面积.但他可以选择并购一组土地,并购的价格为这些土地中最大的长乘以最大 ...

  3. 【转】linux下安装opencv

    Installation in Linux These steps have been tested for Ubuntu 10.04 but should work with other distr ...

  4. Contact Form 7邮件发送失败的解决办法

    一.contact form 7无法发送邮件的原因 对mail()函数的不支持. Contact Form 7表单提交失败在使用过程中会出现,归根结底原因在于wordpress主机问题,由于国 内很多 ...

  5. jbpm6 开发环境搭建

     一.软件下载 1. eclipse       下载地址:http://www.eclipse.org/downloads/ 2.jbpm6.2 Installer       下载地址: ht ...

  6. spring 整合JDBC

    使用Spring提供的三个JDBC模板类(JdbcTemplate.NamedParameterJdbcTemplate.SimpleJdbcTemplate)操作数据库 一.JdbcTemplate ...

  7. hdu2035java

    人见人爱A^B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  8. GetTickCount() 函数的作用和用法

    今天项目中60秒倒计时模块需要用到GetTickCount(),这个函数,在此做下整理和总结. 1.定义 For Release configurations, this function retur ...

  9. AppCan中两种获取信息的方法

    <div id="newsInfo">正在加载...</div> 1.JSON格式: [{'R': '1','NOTI_ID': '9','NOTI_TIT ...

  10. Hibernate占位符警告:use named parameters or JPA-style positional parameters instead.

    Hibernate占位符警告:use named parameters or JPA-style positional parameters instead. >>>>> ...