String a=new String("3"+"4")创建了几个对象? String a = new String("3" + "4");创建了几个对象? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 "3" "4" "34" new String("3" + "4")4个 Compiled from "T.java"public class T extends java.lang.Object{public T(); Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: returnpublic static void main(java.lang.String[]); Code: 0: new #2; //class java/lang/String 3: dup 4: ldc #3; //String 34 6: invokespecial #4; //Method java/lang/String."<init>":(Ljava/lang/String;)V 9: astore_1 10: return}在编译的时候进行了优化,"3"+"4"为一个对象"34",所以总共生成了两个对象! 4个,"3","4","34",new String("3"+"4") 创建了3个,但是最后就剩一个了(string),其他两个被垃圾回收了 一个或两个!常量字符串java给 优化了 一个 new String("") 形式的 不加入string池 "3" + "4" 编译器优化new String("34")这样形式 String a = "34" 才自动加入string池 3个,还有一个String.class呢!4个,还有一个String.class和Serializable.class呢!如果运行该代码的类没有实现Serializable接口Object.class在加载运行该代码的类的时候已经加载了 6个,还有一个String.class、Serializable.class、CharSequence.class、Comparable.class呢 等你们出结论 俺知道 String s = new String ("a");是两个对象,再加一个的话 我想怎么也不会是4 5 6 7 8 9 我赶脚还是2 2个对象String有个静态池的概念,只要是s = “3”,形式赋值的它会放入池当中,池中是char[]的对象,a = “3” + “4”这种形式的放在池中也是char[]对象,0、1分别存着3、4,然后+得到34,这种一个对象。这样就很容易理解楼主的String a = new String("3" + "4");char[] 一个对象 34一个对象 a指向了34 你可以看一下java的经典面试题,里面有提到 new String("3" + "4") 3个吧 "3"一个,"4"一个 new String("3" + "4") 一个String a 只是个变量 只分配内存地址不是对象 a指向new String("3" + "4") 对象 String string=new String("3"+"4"); String string2=new String("3"); String string3=new String("4"); String string4=string2+string3; System.out.print(string.equals(string4));应该是这样的··· 无数个。因为用Java的说了万物皆对象。 我可以肯定的告诉楼主 答案是两个。大家应该知道String s="s";创建了1个对象String s=new String ("s");创建了2个对象String s=new String("a"+"b")也是创建了两个对象因为"a","b"是常量,在编译的时候就可以确定,因此s的值在编译时就可以确定了上面那句等同于String s = new String("ab"); 正确答案我已经查证了答案是看JDK版本了JDK老版本是4个对象JDK新版本是2个对象(新版本的JDK对String计算的时候警醒优化了) 错误了。优化后是2个一个是"34" 一个是new String("34") JComboBox 获取箭头部分或者如何为箭头部分添加监听事件? 求助:不用indexOf这个api,判断字符串中是否含有指定字符串 JDBC在mysql中查询中文返回结果为空 一个时间相减的问题 如何求两条线的交叉点坐标? 请问一下,定义String变量时用new和不用有什么区别??? 关于Java编译问题? 事件处理问题 在类中定义为static型的方法如果会被多个用户(客户端调用)是不是一定要用线程同步关键字 '分解txt="a-s-d-f" 如何用java写 我的第一次写java~~~~~求教100分~~救命~~~ 关于java代码的执行顺序 jsp中自定义对象生命周期问题
4个
public class T extends java.lang.Object{
public T();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: returnpublic static void main(java.lang.String[]);
Code:
0: new #2; //class java/lang/String
3: dup
4: ldc #3; //String 34 6: invokespecial #4; //Method java/lang/String."<init>":(Ljava/lang/Strin
g;)V
9: astore_1
10: return}
在编译的时候进行了优化,"3"+"4"为一个对象"34",所以总共生成了两个对象!
4个,还有一个String.class和Serializable.class呢!如果运行该代码的类没有实现Serializable接口
Object.class在加载运行该代码的类的时候已经加载了
俺知道 String s = new String ("a");是两个对象,再加一个的话 我想怎么也不会是4 5 6 7 8 9
我赶脚还是2
String有个静态池的概念,只要是s = “3”,形式赋值的它会放入池当中,池中是char[]的对象,a = “3” + “4”这种形式的放在池中也是char[]对象,0、1分别存着3、4,然后+得到34,这种一个对象。
这样就很容易理解楼主的String a = new String("3" + "4");
char[] 一个对象 34一个对象 a指向了34
String string=new String("3"+"4");
String string2=new String("3");
String string3=new String("4");
String string4=string2+string3;
System.out.print(string.equals(string4));应该是这样的···
大家应该知道
String s="s";创建了1个对象
String s=new String ("s");创建了2个对象
String s=new String("a"+"b")也是创建了两个对象
因为"a","b"是常量,在编译的时候就可以确定,因此s的值在编译时就可以确定了
上面那句等同于String s = new String("ab");
JDK老版本是4个对象
JDK新版本是2个对象(新版本的JDK对String计算的时候警醒优化了)
优化后是2个一个是"34" 一个是new String("34")