JAVA 中关于String的一些基本知识

一、初始化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指向的字符串没有发生任何改变。

时间: 2024-08-13 08:07:27

JAVA 中关于String的一些基本知识的相关文章

Java基础知识强化101:Java 中的 String对象真的不可变吗 ?

1. 什么是不可变对象?       众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的. 不能改变状态的意思是:不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变. 2. 区分对象和对象的引用 对于Java初学者, 对于String是不可变对象总是存有疑惑.看下面代码: 1 String s =

深刻理解Java中的String、StringBuffer和StringBuilder的区别

首先简单地来梳理一下Java中String.StringBuffer和StringBuilder各自的含义. 1.String类 首先,它是线程安全的,即可以用于多线程编程中: 其次,String类的对象是不可变的,即在定义时就确定了,类似String str="Hello";str+="Java";的语句其实是生成了新的对象,只是我们未察觉到而已.但是注意在大量的字符串新建对象时消耗就很可观,这时必须考虑采用StringBuffer或StringBuilder,否

[转]为什么Java中的String不可变

笔主前言: 众所周知,String是Java的JDK中最重要的基础类之一,在笔主心中的地位已经等同于int.boolean等基础数据类型,是超越了一般Object引用类型的高端大气上档次的存在. 但是稍有研究的人就会发现,String对象是不可修改的,源代码中的String类被定义为final,即为终态,不可继承,String也不提供任何直接修改对象内部值的方法,每次使用replace.substring.trim等方法,或是使用字符串连接符+时,都是返回一个全新的String对象,整个Stri

Java中的String数据类型

本文主要是说明一些String数据类型的基本知识,有些杂乱,不过都是比较重要的东西,主要是参考了网上人的资料.原文网址:http://dev.yesky.com/91/2309091.shtml 主要是一下几点: 1.String是不属于8中基本数据类型的,String是一个对象. 这里补充下JAVA的8种基本数据类型:基本类型分为三类,字符型(char).布尔型(boolean).数值型(byte.short.int.long.float.double).这里数值型又可以分为两种,整数型(in

我说精通字符串,面试官竟然问我 Java 中的 String 有没有长度限制?

String 是 Java 中很重要的一个数据类型,除了基本数据类型以外,String 是被使用的最广泛的了,但是,关于 String,其实还是有很多东西容易被忽略的. 就如本文我们要讨论的问题:Java 中的 String 有没有长度限制? 这个问题要分两个阶段看,分别是编译期和运行期.不同的时期限制不一样. 01 编译期 首先,我们先来合理的推断一下,当我们在代码中使用 String s = ""; 的形式来定义 String 对象的时候,"" 中字符的个数有没

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

转载:http://blog.csdn.net/zhangjg_blog/article/details/18319521 什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变. 区分对象和对象的引用 对于J

再解Java中的String

今天朋友问我String的内容是真的不可变吗?我肯定告诉他是的?因为在我的主观意识里String就是一个不可变的对象.于是他给我发了这段程序: public class StringTest { public static void main(String[] args) throws Exception { String a = "chenssy"; System.out.println("a = " + a); Field a_ = String.class.g

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中的String.getBytes()的用法

在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组.这个表示在不通OS下,返回的东西不一样! String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示,如 byte[] b_gbk = "中".getBytes("GBK"); byte[] b_utf8 = "中".getBytes("UTF-8"); by