JAVA里面 String a = "aaa"; 和 String a = new String("aaa");有啥区别?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA里面 String a = "aaa"; 和 String a = new String("aaa");有啥区别?相关的知识,希望对你有一定的参考价值。
参考技术A Stringa
=
"aaa";是字符串常量的表示,字符串常量是用“
”括起来的字符序列,如“How
are
you"。字符串常量可用来直接初始化一个String对象。
String
a
=
new
String("aaa");是用String类表示字符串,String类所提供的构造方法生成一个字符串,并分配内存。
再看看别人怎么说的。 参考技术B String
a
=
"aaa";是字符串常量的表示,字符串常量是用“
”括起来的字符序列,如“How
are
you"。字符串常量可用来直接初始化一个String对象。
String
a
=
new
String("aaa");是用String类表示字符串,String类所提供的构造方法生成一个字符串,并分配内存。 参考技术C 楼上两个说的不完全正确
String
a
=
"aaa";
用这种方式的时候java首先在内存中寻找"aaa"字符串,如果有,就把aaa的地址给它
如果没有则创建
String
a
=
new
String("aaa");
是不管内存中有没有"aaa"
都开辟一块新内存保存它
可以用以下方法验证下
String
a
=
"aaa";
String
b
=
"aaa";
String
c
=
new
String("aaa");
System.out.println(a==b);
System.out.println(a==c);
结果应该是:
true
false
此题作为java程序员笔试题几率比较高。
你要好好记住哦!O(∩_∩)O~ 参考技术D String
a=“aaa”创建了一个String对象。对象的值是aaa
String
a=new
String(“aaa”)创建了2个String对象。相当于
String
a1=new
String();
String
a=new
String();
a1=“aaa”
a=a1;
需然结果值一样但是,创建过程不一样
Java中String的 "引用" 传递
1、来看一段有趣但又让人困惑的代码片段
public static void main(String[] args){ String x = new String("ab"); change(x); System.out.println(x); } public static void change(String x){ x = "cd"; }
打印结果:"ab"
2、这段代码真正做了什么呢?来解释一下这个过程
首先,当字符串"ab"被创建时,Java分配内存来存储这个字符串常量;然后,这个字符串常量被赋值给了变量x,x实际上保存的是这个字符串对象的引用地址(内存中的地址);x变量保存了字符串对象的引用,x并不是引用本身,它仅仅保存的是内存的引用地址;
而在Java中,都是“值传递”;当x传递给change()方法时,实际上传递的是变量 x 的拷贝;change()方法又创建了一个新的字符串对象"cd",并赋值给了变量x的拷贝,"cd"对象的内存引用地址是不同的!
3、怎么解决这个问题呢?
如果我们确实希望改变这个对象。首先这个对象必须是可变的;第二,需要保证不会创建新的对象赋值给参数变量,因为Java仅仅是值传递
public static void main(String[] args) { StringBuilder x = new StringBuilder("ab"); change(x); System.out.println(x); } public static void change(StringBuilder x) { x.delete(0, 2).append("cd"); }
以上是关于JAVA里面 String a = "aaa"; 和 String a = new String("aaa");有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
java 定义字符串 String a=new String("aaabbb");和String a="aaabbb";有啥区别啊?