java释放string_Java---String总结

JAVA中的String类,不管是日常开发,或者是面试,都是常用的类之一,所以写在这里也为为了总结,方便以后的查阅与复习.

特点:1.Java中所有的类中,String是使用最多的一个类

2.是一个final类,不允许被继承

3.表示字符串常量;

4.它们的值在创建之后不能改变。

5.因为 String 对象是不可变的,所以可以共享它们。

内存分析:

栈(Stack) :存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中),就是说

栈中放对象名或者基本数据类型.

堆(heap):存放所有new出来的具体对象。

常量池(constant pool):在堆中分配出来的一块存储区域,存放储显式的String常量和基本类型常量(float、int等)。另外,可以存储不经常改变的东西(public static final)。常量池中的数据可以共享。

字符串池是堆中的一个特殊的区域,专用用来存储String类型的字符串,每次使用字符串的字面值时,例如 String s=“hello”;,先去字符串池中查找,如果找到,返回这个对象的引用,如果找不到,则在池中创建一个新的字符串,并返回此引用。

静态存储:存放静态成员(static定义的)。

堆和栈的区别:

栈用的是一级缓存,调用完立即释放,系统自动控制.

堆用的是二级缓存,由垃圾回收机制来管理.

举个例子:

String a="aa";创建两个对象,一个是在栈中创建a对象名,另一个在堆创建aa的String对象

String b="aa";创建一个对象,常量池中已有aa的String对象,所以直接在栈中创建了b对象名对堆的"aa"进行共享引用

String str1=new String("cc"); 创建两个对象,一个在栈中创建str1对象名,另一个在常量池中创建cc的String对象

常用方法:

public classStringDemo {public static voidmain(String [] args){//String类常用方法:

String str1="this is method about String";

System.out.println("返回字符串长度:"+str1.length());

System.out.println("提取指定位置索引1位开始"+str1.substring(1));

System.out.println("提取指定位置索引5位开始索引19位结束:"+str1.substring(5,19));

System.out.println("查找字符串:"+str1.indexOf("s"));

System.out.println("指定位置提取单个字符:"+str1.charAt(0));

System.out.println("返回一个前后不含任何空格的调用字符串的副本:"+str1.trim());

System.out.println("判断字符串是否以指定的前缀结尾:"+str1.endsWith("this"));

System.out.println("判断字符串是否以指定的前缀开头:"+str1.startsWith("Demo"));

System.out.println("连接两个字符串,并新建一个包含调用字符串的字符串对象:"+str1.concat("world"));

System.out.println("比较字符串:"+str1.equals("this is String Demo"));

System.out.println("将调用字符串中出现某个字符的所有位置都替换为另一个字符:"+str1.replace("this", " "));

System.out.println("全部转换为大写"+str1.toLowerCase());

System.out.println("全部转换成小写"+str1.toUpperCase());//String类与基本数据类型的转换

String str2=new String("this is String world");//int in1=Integer.parseInt(str2);//String 转 int//double dou1=Double.parseDouble(str2);//Stirng 转 double//boolean bool1=Boolean.parseBoolean(str2);//String 转boolean 感觉无意义~//基本数据类型与String的转换

int in2=2;double do2=3;long lo2=4;float f=5;boolean b=true;

Object object="helo";

String str3=newString();

str3.valueOf(in2);//int 转 String

str3.valueOf(do2);//double 转 String

str3.valueOf(lo2);//long 转 String

str3.valueOf(f);//float 转 String

str3.valueOf(b);//Boolean 转 String

str3.valueOf(object);//object 转 String//String类 与 list的相互转换

List list2=new ArrayList();

list2.add("a");

list2.add("b");

list2.add("c");

String s=String.join(",",list2);//list 转 String

System.out.println(s);

String abc="a,b,c";

String [] arr=abc.split(",");

List list=java.util.Arrays.asList(abc);//String 转 list

System.out.println(list);

String总结:

String 类并不是 java的基本数据类型。String 类是java.lang下所提供的类。

在java 中使用字符串最重要的一个规则必须记住,一个字符串对象一旦被创建,它的内容就是固定不变的

String str=”Hello”;

这个声明会创建一个长度为5,内容为Hello的字符串对象,你无法改变这个字符串对象的内容。

String

str=”Hello”;

str = “HelloWorld”;

不要以为这样就改变了字符串对象的内容,事实上。上面那段代码中产生了两个字符串对象,一个是Hello字符串对象,长度为5;一个是HelloWorld字符串对象,长度为10,两个不同的字符串对象。你不是在Hello字符串后面加上World字符串,而是让str 引用名称从新引用HelloWorld字符串,而不在引用Hello字符串但Hello字符串在内存中还是存在的。

一个String

对象的长度是固定的,不能改变它的内同或者是附加新的字符到String 对象中。你也许会使用+来连接字符串达到附加新字符或字符串的目的。但会产生一个新String 实例。如果程序对这种附加字符串的需求很频繁,会消耗很大资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值