一、初始化String的两种方式

String str1 = "hello";
String str2 = new String("hello");

第一种方式本质上是声明了一个String的匿名对象,然后str1指向该对象。该匿名对象保存在对象池中。

第二种方式分为两步:

1) 声明一个"hello"的String对象

2) new 关键字申请新的内存,将该内存分配String对象,并将值"hello"分配给该对象。步骤1中的对象废弃,等待GC回收。

开发中推荐使用方式1。

二、两种比较String的方式

通过“==” 或者String的equals方法可以比较两个String,但它们之间有本质区别。"=="比较的是两个对象的地址,而equals方法比较的是两个对象的内容。

public class TestJava
{
public static void main(String[] args)
{
String str1 = "hello";
String str2 = new String("hello"); System.out.println(str1 == str2);//false
System.out.println(str1.equals(str2));//true
}
}

三、String的不可改变性

String对象一旦声明那么它的内容就不可改变。

public class TestJava
{
public static void main(String[] args)
{
String str1 = "hello";
String str2 = "hello"; System.out.println(str1 == str2);//true
System.out.println(str1.equals(str2));//true str2 += " world";
System.out.println(str1 == str2);//false
System.out.println(str1.equals(str2));//false
}
}

一开始str1和str2指向同一个对象。然后对str2做+=操作,实际上是str2指向了生成的一个新的"hello world"字符串,所以str2指向的地址和内容都已经改变。而在这之前str2指向的字符串没有发生任何改变。

JAVA 中关于String的特性的更多相关文章

  1. Java中的String为什么是不可变的?

    转载:http://blog.csdn.net/zhangjg_blog/article/details/18319521 什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那 ...

  2. Java中的String与常量池[转帖]

    string是java中的字符串.String类是不可变的,对String类的任何改变,都是返回一个新的String类对象.下面介绍java中的String与常量池. 1. 首先String不属于8种 ...

  3. Java中的String与常量池

    string是java中的字符串.String类是不可变的,对String类的任何改变,都是返回一个新的String类对象.下面介绍java中的String与常量池. 1. 首先String不属于8种 ...

  4. Java中的String为什么是不可变的? -- String源码分析

    众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不能改变状态的意思是, ...

  5. Java中的String,StringBuilder,StringBuffer的区别

    这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面. 首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > ...

  6. Java中的String和StringBuffer

    在任何编程语言中,字符串都是我们编写程序时不可避免要用到的常用的数据类型之一. 对于Java初学者而言,当谈到String和StringBuffer的区别时,通常都会有些困惑. 而要弄清楚两者之间的区 ...

  7. Java中的String为什么是不可变的? — String源码分析

    原文地址:http://www.importnew.com/16817.html 什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为 ...

  8. java中面向对象的三大特性小结

    java中面向对象的三大特性:封装.继承.多态 封装 把抽象的数据和对数据的操作封装在一起,隐藏变量的实现细节.数据被保护在内部,程序的其他部分只有通过被授权的操作(成员方法)才能对数据进行访问. 1 ...

  9. 【翻译】为什么Java中的String不可变

    笔主前言: 众所周知,String是Java的JDK中最重要的基础类之一,在笔主心中的地位已经等同于int.boolean等基础数据类型,是超越了一般Object引用类型的高端大气上档次的存在. 但是 ...

随机推荐

  1. setTimeout()和setInterval()方法的区别?

    因为setTimeout(表达式,延时时间)在执行时,是在载入后延迟指定时间后,去执行一次表达式,记住,次数是一次 而setInterval(表达式,交互时间)则不一样,它从载入后,每隔指定的时间就执 ...

  2. svg中改变class调用的线条颜色

    <style type="text/css"><![CDATA[ .kV220 {stroke:rgb(255,0,0);fill:none} .kV22 {st ...

  3. shell脚本实例-命令记录

    http://bbs.51cto.com/thread-594667-1.html script使用注意事项输入1: [root@-shiyan rec]# cat record1 #!/bin/ba ...

  4. Consul

    1. 什么是consul? 是一个服务管理软件. 支持多数据中心下,分布式高可用的,服务发现和配置共享. consul支持健康检查,允许存储键值对. 一致性协议采用 Raft 算法,用来保证服务的高可 ...

  5. 【转】越狱的 iPhone、iPad 通过网站实现一键安装 ipa 格式的 APP 应用

    1.已经越狱的 iPhone.iPad 设备,当通过其自带的 safari 浏览器访问 ipa 应用下载网站时,利用 itms-services 协议,可以一键安装 ipa 文件的 iOS 应用,例如 ...

  6. java从零到变身爬虫大神(一)

    学习java3天有余,知道一些基本语法后 学习java爬虫,1天后开始出现明显效果 刚开始先从最简单的爬虫逻辑入手 爬虫最简单的解析面真的是这样 import org.jsoup.Jsoup; imp ...

  7. Android软键盘遮挡的四种解决方案

    问题概述 在编辑框输入内容时会弹出软键盘,而手机屏幕区域有限往往会遮住输入界面,我们先看一下问题效果图: 输入用户名和密码时,系统会弹出键盘,造成系统键盘会挡住文本框的问题,如图所示: 输入密码时输入 ...

  8. HttpClient简介 post get -转自ibm

    HttpClient简介 HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.虽然在 JDK 的 jav ...

  9. Spring3.0.6定时任务task:scheduled

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  10. CUICatalog: Invalid asset name supplied: (null) _configureCellForDisplay:forIndexPath

    1.CUICatalog: Invalid asset name supplied: (null) 如果连续出现几个这样的错误,表示UIImageView为空 那么就需要检查UIImageView是否 ...