String类详解(1)

首先String是一个类。 

1,实例化String类方法。

1)直接赋值:String name="haha";

2)通过关键字:String name=new String("haha");

2,String类的数据比较。

首先回顾一下,基础数据的比较使用"=="比较。

public class StringDemo04{
    public static void main(String args[]){
        String str1 = "hello" ;                    // 直接赋值
        String str2 = new String("hello") ;        // 通过new赋值
        String str3 = str2 ;                    // 传递引用,共用一个堆地址空间。
        System.out.println("str1 == str2 --> " + (str1==str2)) ;    // false
        System.out.println("str1 == str3 --> " + (str1==str3)) ;    // false
        System.out.println("str2 == str3 --> " + (str2==str3)) ;    // true
    }
};

现在使用的判断相等是判断地址空间相等,判断的值是地址值。

如果要想判断其内存是否相等,则必须要使用String类中提供的equals()方法完成。

此方法使用如下:

public class StringDemo05{
    public static void main(String args[]){
        String str1 = "hello" ;                    // 直接赋值
        String str2 = new String("hello") ;        // 通过new赋值
        String str3 = str2 ;                    // 传递引用
        System.out.println("str1 equals str2 --> " + (str1.equals(str2))) ;    // true
        System.out.println("str1 equals str3 --> " + (str1.equals(str3))) ;    // true
        System.out.println("str2 equals str3 --> " + (str2.equals(str3))) ;    // true
    }
};

结论:String两种比较方式:

1)一种是“==”比较的是地址值。

2)一种使用equals()完成,比较的是具体的内容,比较常用。

3,两种实例化的区别。

字符串的特征:

1)一个字符串就是String的匿名对象。(即没有分配栈内存空间)

public class StringDemo06{
    public static void main(String args[]){
        System.out.println("hello".equals("hello")) ;
    }
};

了解此后,实际之前操作:

String name="hehe";

就表示将一个堆内存空间指给了栈内存空间。

只有掌握了这一点后,才能分析出使用哪种方式实例化更合适。

public class StringDemo07{
    public static void main(String args[]){
        String str1 = "hello" ;                    // 直接赋值
        String str2 = "hello" ;                    // 直接赋值
        String str3 = "hello" ;                    // 直接赋值
        System.out.println("str1 == str2 --> " + (str1==str2)) ;    // true
        System.out.println("str1 == str3 --> " + (str1==str3)) ;    // true
        System.out.println("str2 == str3 --> " + (str2==str3)) ;    // true
    }
};

这里没有用equals()方法,但是都是ture。

以上三个的内存地址都一样,

因为三个对象指向同一个堆内存空间,所有使用直接赋值能够节省内存空间。

而使用new String()方式。

public class StringDemo08{
    public static void main(String args[]){
        String str1 = new String("hello") ;
    }
};

使用直接赋值方式只要一个空间即可,而new String()则会开辟两个地址空间。所以最好使用直接赋值。

2)字符串的内容不可改变。

这是一个重要特征。

public class StringDemo09{
    public static void main(String args[]){
        String str = "hello" ;        // 声明字符串
        str = str + " world!!!"    ;    // 修改字符串
        System.out.println("str = " + str) ;
    }
};

这里字符串对象是改变了,但是字符串并没有改变。

实际上字符串内容的改变,改变的只是内存地址的引用关系。

所以在开发中要避免以下情况出现。

public class StringDemo10{
    public static void main(String args[]){
        String str1 = "LiXingHua" ;        // 声明字符串对象
        for(int i=0;i<100;i++){            // 循环修改内容
            str1 += i ;                    // 字符串的引用不断改变
        }
        System.out.println(str1) ;
    }
};

但是这样的操作,要断开连接100次才能完成。这种操作性能很低,应避免使用。

时间: 2024-10-24 07:36:50

String类详解(1)的相关文章

Java String类详解

Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 类结构: public final class String extends Object implements Serializable, Comparable<String>, CharSequence 类概述: Java程序中的所有字面值(string literals),即双引号括起的字符串,如"abc",都是作为String类的实例

String 类详解

StringBuilder与StringBuffer的功能基本相同,不同之处在于StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此效率上StringBuilder类更高,但是在多线程环境中则应该使用StringBuffer,String类是final的,所有改变String对象的操作都会生成一个新的String对象(通过调用StringBuilder类完成) public class LearnString { public static void main(

std::string类详解

之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够.字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要.我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?).我们尽可以把它看成是C++的基本数据类型. 标准模板库(STL)提供了一个std::string类,其是std::basic_string的一个特化,它是一个容器类,可把字符串当作普通类型来使用,并支持比

StringBuffer类详解(String、StringBuffer、StringBuilder的区别)

StringBuffer类详解 1.类结构: ·        java.lang.Object ·        java.lang.StringBuffer ·        All Implemented Interfaces: Serializable, Appendable, CharSequence public final class StringBuffer extends Object implements Serializable, CharSequence 2.类概述: 一

Android技术18:Android中Adapter类详解

1.Adapter设计模式 Android中adapter接口有很多种实现,例如,ArrayAdapter,BaseAdapter,CursorAdapter,SimpleAdapter,SimpleCursorAdapter等,他们分别对应不同的数据源.例如,ArrayAdater对应List和数组数据源,而CursorAdapter对应Cursor对象(一般从数据库中获取的记录集).这些Adapter都需要getView方法返回当前列表项显示的View对象.当Model发生改变时,会调用Ba

URLConnection类详解

为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3753224.html URLConnection概述 URLConnection是一个抽象类,表示指向URL指定资源的活动连接. URLConnection类本身依赖于Socket类实现网络连接.一般认为,URLConnection类提供了比Socket类更易于使用.更高级的网络连接抽象.但实际上,大多数程序员都会忽略它

Cocos2d之Node类详解之节点树(二)

一.声明 本文属于笔者原创,允许读者转载和分享,只要注明文章来源即可. 笔者使用cocos2d框架的cocos2d-x-3.3rc0版本的源代码做分析.这篇文章承接上篇<Cocos2d之Node类详解之节点树(一)>. 二.简介 节点 一个Node对象. 节点树 上篇文章介绍到,Node类有一个成员变量 Vector<Node*> _children,这是一个保存所有子节点的数组,因为Node类采用遍历树的方式获取子节点进行渲染,所以我管这两个东西的结合叫节点树. 三.源码详解 &

Android开发之Html类详解

在进行Android开发中经常回忽略Html类.这个类其实很简单,就是将HTML标签文本解析成普通的样式文本.下面就让我么看一下这个类的具体介绍. 类结构: java.lang.Object    ? android.text.Html 类概述: 这个类用于处理的HTML字符串并将其转换成可显示的样式文本.但并不是所有的HTML标记的支持. 公有方法: 说其简单是应为它就有四个方法: Public Methods static String escapeHtml(CharSequence tex

C++ string 用法详解

/////////////////////////////////////////////////////////////////////////////////// 任何人对本文进行引用都要标明作者是Nicolai M.Josuttis /////////////////////////////////////////////////////////////////////////////////// C++ 语言是个十分优秀的语言,但优秀并不表示完美.还是有许多人不愿意使用C或者C++,为什