"hello"和new String("hello")的区别?

/**
	"hello"和new String("hello");的区别?

	当java直接使用形如"hello"的字符串直接量(包括可以再编译时
	就能计算出来的字符串值)JVM将会使用常量常量池来管理字符串;
	当使用new String("hello"); JVM先会使用常量池来管理“hello”
	直接量,在调用String类的构造器来创建一个新的String对象,新
	创建String对象会保存在堆内存中。

	补习:什么是常量池?

	常量池在java用于保存在编译期已确定的,已编译的class文件中的
	一份数据。

	常量池中除了包含代码中所定义的各种基本类型(如int、long等等)
	和对象型(如String及数组)的常量值外,还包含一些以文本形式出
	现的符号引用。

	自己理解:一块专门存放常量的内存区域。

	这个博客解释的有点深度:http://yiliner.iteye.com/blog/207723
	百科:http://baike.baidu.com/view/8680346.htm?fr=aladdin

	堆内存:堆允许程序在运行时动态地申请某个大小的内存空间
	百科:http://baike.baidu.com/view/1962829.htm?fr=aladdin
*/
public class StringTest
{
	public static void main(String[] args)
	{
		String str1 = "美好未来";
		String str2 = "美好";
		String str3 = "未来";

		//str4直接引用常量池中的“美好未来”
		String str4 = "美好"+"未来";
		//str5直接引用常量池中的“美好未来”
		String str5 = "美"+"好"+"未"+"来";
		//在编译时期不能确定下来,不能引用
		//常量池中的内存字符串 
		String str6 = str2+str3;
		// str7中引用堆内存中新建的String对象
		String str7 = new String("美好未来");
		// true
		System.out.println(str1 == str4);
		// true
		System.out.println(str1 == str5);
		// false
		System.out.println(str1 == str6);
		// false
		System.out.println(str1 == str7);
		// 返回字符串对象的规范化表示形式。
		// System.out.println(str1.intern());
	}
}

"hello"和new String("hello")的区别?

时间: 2024-08-21 19:46:44

"hello"和new String("hello")的区别?的相关文章

hadoop中Text类 与 java中String类的区别

hadoop 中 的Text类与java中的String类感觉上用法是相似的,但两者在编码格式和访问方式上还是有些差别的,要说明这个问题,首先得了解几个概念: 字符集: 是一个系统支持的所有抽象字符的集合.字符是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等.例如 unicode就是一个字符集,它的目标是涵盖世界上所有国家的文字和符号: 字符编码:是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对.即在符号集

java的String和android的String有什么区别?

这是今天阿里电话面试被问到的,在之前确实没有想过(一直以为是一样的),于是面试完之后,我马上打开了源码,对这两个String类进行了比较,下面是我的发现. 首先我观察了这两个String类所导入的包,发现两者有些差异: 这是android版本: import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.nio.CharBuffe

C#String与string大小写的区别

1.tring是c#中的类,String是.net Framework的类(在c# IDE中不会显示蓝色)  2.# string映射为.net Framework的String  3.果用string,编译器会把它编译成String,所以如果直接用String就可以让编译器少做一点点工作.如果使用c#,建议使用string,比较符合规范     4.ing始终代表 System.String(1.x) 或 ::System.String(2.0) ,String只有在前面有using Syst

String Buffer和String Builder的区别(转)

相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类.String类是不可变类,任何对String的改变都会引发新的String对象的生成:而StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象,可变和不可变类这一对对象已经齐全了,那么为什么还要引入新的StringBuilder类干吗?相信大家都有此疑问,我也如此.下面,我们

String StringBuilder StringBuffer 区别

String StringBuilder StringBuffer 区别: String 字符串常量 (可用于少量数据,变化不大的情况) 最慢 不可变类(每次改变都会引起创建新的String类) StringBuffer 字符串变量 线性安全(可多线程使用) 居于中间 可变类 StringBuilder 字符串变量 非线性安全(不支持并发操作,可单线程使用) 最快 可变类

C#中 StringBuilder类 与 String类的区别---(转)

  在找工作的时候,去了些公司,避免不了要面试和笔试.不过一般最起初的是笔试.我印象中有这样有一道题目:StringBuilder类与 String类的区别?那时候我不太清楚这两个类的区别,今天在看代码的时候,看到同事也用了StringBuilder类.于是我就上网查查了资料,也想总结下StringBuilder类与 String类的区别.学计算机语言的人一定要明白哦,说不定那天你去找工作了,也会遇到这个问题呢. String 对象是不可改变的.每次使用 System.String 类中的方法之

Android开发中.toString()和String.valueOf()的区别

其实,很多时候效果是差不多的 但是,有的时候用.toString()会报错,而用String.valueOf()就不会报错 这说明两者是有差别的,在细微之处~ .toString()和String.valueOf()的区别在哪呢? jdk的文档中对.toString()有说明: String.valueOf(Object   o)  if the argument is null, then a string equal to "null ";  otherwise,  the val

string和string.h的区别

头文件string与string.h的区别 转自http://www.cnblogs.com/Cmpl/archive/2012/01/01/2309710.html 在C++中,#include<iostream>与#include<iostream.h>的区别,前者要使用更新的编译器(其实大部分编译器多比较前卫了,出了有些搞嵌入式的用变态的编译器). 喔,原来iostream是C++的头文件,iostream.h是C的头文件,即标准的C++头文件没有.h扩展名,将以前的C的头文

【转】(String)、toString、String.valueOf的区别

在Java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能.本文将对常用的转换方法进行一个总结. 常用的方法有(String)+要转换的对象,Object.toString(),String.valueOf(Object)等. 1.(String) 这是标准的类型转换,将object转成String类型的值.使用这种方法时,需要注意的是类型必须能转成String类型.因此最好用instanceof做个类型检查,以判断是否可以转换.否则容易抛出CalssCastExcepti