Java之字符串学习

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对象,而不是向原有对象追加内容。

时间: 2024-10-07 15:22:47

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

java之字符串学习记录

public class StringDemo { public static void main(String[] args) { //静态初始化字符串 String s1 = "hello china!"; String s3 = "Hello China!"; System.out.println(s1); //动态初始化字符串 String s2 = new String("hello china!,china,china"); Stri

Java字符串学习

Java中字符串是String类的实例,字符串也是对象,所以 Java将字符串作为对象进行管理 Java使用java.lang 包中的String类来创建字符串. 1.定义字符串: 使用 " " 定义,java中由""定义的多个字符都是字符串,不能作为其他类型使用,例如"30+70"绝不等于100 2.声明字符串变量 String str=null; String str=""; 空字符串和Null 空字符串 是由"

Java 之字符串(7)

什么是 Java 中的字符串 在程序开发中字符串无处不在,如用户登陆时输入的用户名.密码等使用的就是字符串.其实,在前面的章节中我们就已经使用了字符串, 例如我们在控制台中输出的 "Hello World" . "imooc"等. 在 Java 中,字符串被作为 String 类型的对象处理. String 类位于 java.lang 包中.默认情况下,该包被自动导入所有的程序. 创建 String 对象的方法: Java 中字符串的不变性 String 对象创建后

java/android 设计模式学习笔记(13)---享元模式

这篇我们来介绍一下享元模式(Flyweight Pattern),Flyweight 代表轻量级的意思,享元模式是对象池的一种实现.享元模式用来尽可能减少内存使用量,它适合用于可能存在大量重复对象的场景,缓存可共享的对象,来达到对象共享和避免创建过多对象的效果,这样一来就可以提升性能,避免内存移除和频繁 GC 等. 享元模式的一个经典使用案例是文本系统中图形显示所用的数据结构,一个文本系统能够显示的字符种类就是那么几十上百个,那么就定义这么些基础字符对象,存储每个字符的显示外形和其他的格式化数据

java中字符串String 转 int(转)

java中字符串String 转 int String -> int s="12345"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法:i=Integer.valueOf(s).intValue(); 这两种方法有什么区别呢?作用是不是一样的呢?是不是在任何下都能互换呢? int -> String int i=12345; String s=""; 第一种方法:s=i+""; 第二种方法:s=

java先导课程学习总结

经过两个星期四节课的java学习,我也对java这门语言有了一定的认识.刚开始上课的时候,我认为java把C语言中老师所说的模块化编程进行了强调,进行一个类,一个类的编程,在类中构造相应的方法,使用的时候再调用.这样能够减少重复的代码,同时能让代码整体看上去比较整洁.这样写起程序来,调试比较容易,eclipse的自动纠错功能用起来也非常好用,感觉写成一个java的程序在有C语言的基础上还是比较容易完成的.后来慢慢地,老师向我们介绍了面向对象的各类思想以及这些思想在java语言中的使用.后来能够明

人在囧途——Java程序猿学习Python

引言 LZ之前其实一直对python都很好奇,只是苦于平时没有时间去了解它,因此趁着51假期这个机会,便迫不及待的开始了自己的探索.作为一个标准的Java程序猿,在了解python的过程当中,LZ遇到了很多囧事,接下来LZ就一一给大家说道说道.本文纯属看个乐子,非python教学. 囧事一:eclipse插件安装篇 由于LZ习惯了使用eclipse进行开发,因此对python的研究,还是希望可以在eclipse上进行试验.那么第一件事,自然是安装python的eclipse插件,于是百度.goo

Java程序员学习一天半C++的感想

大学期间,学了一学期的C语言,当然包括学习数据结构时,用的也是C语言.当时刚刚接触计算机,对于编程更是一无所知.上课学习学习,偶尔会照着书上敲一下代码.大二下学期,就丢掉了不用了.最近由于工作的需要,要使用Java Native Interface,所以就学习了1天半的C++,对C++有了一点点的了解,写一下自己的理解. 一天半时间,也学不多少东西,我主要就搞明白了下面几个问题: 1)指针 这么多年了,还记得在C语言时,最难以理解的,应该属于指针了.还记得谭浩强的那本C语言书(书名是啥,真的忘了

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

java之jvm学习笔记十三(jvm基本结构) 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让概念在你的脑子里变成图形,所以只要你有耐心,仔细,认真,并发挥你的想象力,这一章之后你会充满自信.当然,不是说看完本章,就对jvm了解了,jvm要学习的知识实在是非常的多.在你看完本节之后,后续我们还会来学jvm的细节,但是如果你在学习完本节的前提下去学习,再学习其他jvm的细节会事半功倍. 为了让你每一个知识点都有迹