String 和 new String 的区别

  1. String 是常量,一旦创建,值就不能改变

    翻开源码你可以看到 它由 final修饰

    那么String  和 new String("xx");有什么区别?

    下面先看下代码

  2. public class Str {
    	public static void main(String[] args) {
    		String st1 = "abc";
    		String st2 = new String("abc");
    		String  st3 = "abc";
    
    		System.out.println(st1 == st2); // false
    		System.out.println(st1.equals(st2));// true
    		System.out.println(st1 == st3);// true
    	}
    }

    str1 是new了一个对象,当值在字符串池中不存在,就会把值放在 池中,后面如果再创建,就不会再创建,而是直接从池中拿过来直接用

    str2 是二个对象 一个放在池中,一个自己的对象

时间: 2024-10-15 17:05:33

String 和 new String 的区别的相关文章

String,StringBuffer与StringBuilder的区别??

String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简 要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了

【Java】String,StringBuffer与StringBuilder的区别??

String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以

StringBuilder、StringBuffer和String三者的联系和区别(转)

StringBuilder.StringBuffer和String三者的联系和区别 1. String 类    String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间.    String a = "a"; //假设a指向地址0x0001    a = "b";//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的,a 已

C#中NULL,"",DBNULL,String.Empty,Convert.IsDBNull()的区别

C#中的空值的判断较麻烦,不象在VB6中那么简单,这些各种空值的判断和理解对不熟悉的人来说,可能很麻烦,现就我在使用过程中的一点体会和大家共同分享. (1)NULL null 关键字是表示不引用任何对象的空引用的文字值.null 是引用类型变量的默认值.那么也只有引用型的变量可以为NULL,如果 int i=null,的话,是不可以的,因为Int是值类型的. (2)DBNULL DBNull在DotNet是单独的一个类型,该类只能存在唯一的实例,DBNULL.Value,DBNull唯一作用是

创建String字符串的方式与区别

Java中创建一个字符串的方式有很多种,常见如: String s = new String("riqi"); String s = "riqi"; 但两者有什么区别呢? 要知道,Java中new一个对象实际上是在栈内存中创建一个引用类型指向到堆内存中的对象,而字符串对象一旦创建就不能变更. Java为String类型提供了缓冲池机制,即当使用双引号方式创建字符串对象时,Java环境首先会从字符串缓冲池中寻找相同内容的字符串,如果找到则直接拿过来使用,如果没有则创建

python中string.casefold和string.lower区别

string.casefold和string.lower 区别 python 3.3 引入了string.casefold 方法,其效果和 string.lower 非常类似,都可以把字符串变成小写,那么它们之间有什么区别?他们各自的应用场景? 对 Unicode 的时候用 casefold string.casefold官方说明: Casefolding is similar to lowercasing but more aggressive because it is intended t

String、StringBuffer、StringBuilder区别

来源:http://blog.csdn.net/koozxcv/article/details/50372374 String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全)简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常

Java中main函数参数String args[] 和 String[] args 区别

其实没什么区别的:当初我也是这样的疑问,呵呵:非要说区别就看下面:执行效果上没有不同, 但在语法意义上略有不同. 比如, String与String[], 前者叫字符串类型而后者叫字符串数组类型. String args[]单从类型上来讲属于字符串类型, 而从变量本身来讲是一个数组类型, 因此组合起来说明此变量为一个字符串类型的数组, 也就是说数组中的所有元素都为String类型. String[] args单从类型上来讲属于字符串数组类型, 而从变量本身来讲就是一个单纯的引用变量, 因此这种方

【Java 重难点知识】String s=new String("abc") 与 String="abc"; 区别

首先, String s=new String("abc");这句话创建了2个对象: 一个为new出来的一个实例对象,另一个则为"abc"; s不为对象,s只是一个引用(C++中的指针). 查询Java中String类的构造器,有一个这样的构造器,api如下: public ( original) 初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列:换句话说,新创建的字符串是该参数字符串的副本.由于 String 是不可变的,所以无需使用此构造