实时搜索: new string创建几个对象

new string创建几个对象

212条评论 1969人喜欢 2382次阅读 433人点赞
请给出详细解释 , String s1 = "1234";
String s2 = "1234";
String s3 = new String("5678");
String s4 = new String("5678");
上面总共创建了几个对象?s1和s2是不是同一个对象?s3和s4是不是同一个对象?我觉得new后面的”5678“应该是一个对象吧,它存储在堆中。但是这里有两个new ”5678“,那么在第二次new String(”5678“)时会不会因为在堆中已经有存储了一个”5678“对象,所以就不在堆中重新生成了一个”5678“呢? ,...

以下JAVA代码 String s1="bc"; String s2="b为什么只创建了一个对象?: 在Java当中,String是一个比较特殊的类,跟其他引用类型的变量不同,String在某些时候可以当作基本类型的变量来看待,这就是题目当中的s1和s2跟只创建一个对象的道理,创建的两个变量都指向了同一块内存空间。
String s1=new String("bc"); String s2=new String("bc");则是创建两个对象,每次new的时候都是在内存当中另外开辟出一块空间分别储存。

还有一句很重要的话就是:String永远不会发生改变,任何对String的操作都是另外返回一个新的String,而不是在原有的String上进行修改:
例如:String s1 = "bc";
String s2 = s1;

s1 = "de";

这时输出s2会发现s2仍然等于"bc"

正是String的这个特性,占用太多内存空间,后来才有了StringBuffer/StringBuilder两个类。
关于String这个比较特殊类的用法还有很多,楼主有兴趣的话可以单独找来看看。

new String("1"+2),new String("a"+2),new String("1"+"2"),new String("a"+"b")分别创建了多少对象: 两个,两个,三个,三个。因为“1”字符串在缓冲区中,再拼接2就会产生一个新的字符串“12”,这样在缓存区中就有两个对象了,虽然new了一次,但是还会从缓冲区中去取,不再创建新的了,所以前两个创建了两对象。

“1”和“2”是两个字符串。两个字符串再拼成一个新的字符串“12”,这样在缓冲区中就有上对象了,new的时候就会从缓冲区中去取,缓冲区有了就不再创建新的了,所以创建了上对象。同理“a”和“b”。

JAVA String对象个数问题: 其实楼上的意思都对,但答案并不对.其实正确答案是4个,并不是3个.
首先第一步
String s1 = "1234";时在字符串池中创建了一个1234的对象,指向s1;//这里创建了一个对象
第二步
String s2 ="1234";是先到字符串池中去找,池中有一个1234的对象,直接指向s2;//这里用的是已经有的对象所以并没有重新创建对象,目前还是创建一个对象
第三部
String s3 = new String ("5678");这里创建了两个对象,千万别想错了,是两个,不是1个,首先在字符串池中创建一个5687的对象,之后再队内存中创建一个String对象,再把5678对象赋值给String对象//这里是两个对像,楼上的全错了不要被误导.
public String(String original) {
this.value = original.value;
this.hash = original.hash;
}
这是String带参数的构造方法,需要传一个String对象进行值和hashcode的复制,所以是两个
第四部
String s4 = new String ("5678");到字符串池中找,存在5678对象,再在堆中创建一个新的String对象再把5678复制给新的String对象//由于字符串池中有5678不需要在创建新的了,所以这里只创建了一个对象

综上所述,第一步创建了一个对象,第二步没创建对象,第三部创建了两个对象,第四步创建了一个对象 1+0+2+1=4;所以总共创建了4个对象,请楼主明察

JAVA 声明new 过多临时对像会导致内存溢出,怎么解决?: java有垃圾回收机制
可以自己在后面写stu=null;
不过一般不会那么容易溢出的

java中对象的创建如Date类的对象;new Date();那么对对象的操作:String s=new Date().toString();是嘛意思: new Date(); 表示获取系统当前日期,
String s=new Date().toString();表示把获取的当前系统日期从日期类型转换成String类型,要想按时间格式输出,必须格式化S
格式:DateFormat df=new SimpleDateFormat(yyyy-MM-dd HH:mm:ss)
String str=df.format(s);
System.out.println(str);
输出值的格式:2010-12-17 18:36:12

编写一个JAVA程序,定义一个学生类Student,属性包含姓名,年龄,性别,根据该类分别创建五个学生对象...:

编写学生类Student,属性包含姓名,年龄,性别,根据该类分别创建五个学生对象,如下:


public class Student {

private String name;
private int age;
private String sex;

public Student(String name,int age,String sex){
this.name=name;
this.age=age;
this.sex=sex;
}

public static void main(String[] args){
//定义学生对象,直接在构造函数里给值,也可以用set设置值,get获取值
Student st1=new Student("xiaobai",12,"男");

Student st2=new Student("xiaohong",12,"女");

Student st3=new Student("xiaoyi",12,"女");

Student st4=new Student("xiaoer",12,"男");

Student st5=new Student("xiaodong",12,"女");

System.out.println("学生一:"+st1);
System.out.println("学生二:"+st2);
System.out.println("学生三:"+st3);
System.out.println("学生四:"+st4);
System.out.println("学生五:"+st5);
}



public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", sex=" + sex + "]";
}



}

结果:
学生一:Student [name=xiaobai, age=12, sex=男]
学生二:Student [name=xiaohong, age=12, sex=女]
学生三:Student [name=xiaoyi, age=12, sex=女]
学生四:Student [name=xiaoer, age=12, sex=男]
学生五:Student [name=xiaodong, age=12, sex=女]

为什么StringBuffer s1 = new StringBuffer("abc"); 不可以和String s2 = "abc";一样定义: String和StringBuffer他们都可以存储和操作字符串,即包含多个字符的字符串数据。   
String类是字符串常量,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的。
StringBuffer类的构造函数   public StringBuffer()   
创建一个空的StringBuffer类的对象。   public StringBuffer( int length )   
创建一个长度为 参数length 的StringBuffer类的对象。   注意:如果参数length小于0,将触发NegativeArraySizeException异常。   
public StringBuffer( String str )   用一个已存在的字符串常量来创建StringBuffer类的对象

java中字符串常量放在哪里: 这个是在内存中存放的地址,你必须str1.equals(str2)才可以判断的。
你可以输出地址看看,你这样比较的是两个地址,当然是false了。
第一个直接缓存 数据共享Hello,是true。

  • dnf哪里板砖

    养一只很小又特别调皮的边牧是一种怎样的体验: 家里养了一只智商超高的边牧就是天天和你玩心机 我们家倪可陆个月的时候,有一天早上一直趴在地上不动,看着我笑,但是就是不动,平时到处跑到处蹦蹦跳跳拦都拦不住,我就觉得奇怪,喊他他也不理我,就看着我笑 后来我觉得不对劲,...

    539条评论 1609人喜欢 2717次阅读 982人点赞
  • pd门多少钱

    哪些是职场人不成熟的表现: ...

    649条评论 4271人喜欢 2508次阅读 929人点赞
  • gucci哪个国家便宜吗

    现代人不快乐的十个原因:我们为什么总是活得不快乐?: 其实在这个物资充裕但是精神匮乏的时代,我们得到了物资的享受,却疏忽了个人的情感,人总觉得自己吃饱了穿暖了,但是总是缺乏一种安全感和自我平衡的内心,失去了原有的天真和自由,让自己的内心缺少平息。 ...

    257条评论 2228人喜欢 2075次阅读 843人点赞
  • 14岁属什么

    人为什么总是不快乐: 说到底,我们不快乐,无非这几个原因。1.可以改变的,改变不了,不可改变的,接受不了。听上去矛盾又可笑,其实,生活中这样的人不少。明明再勤奋一点,再努力一点,就可以过上更好的生活,但就是懒,不想动,不想做,又羡慕那些过...

    537条评论 5092人喜欢 2901次阅读 415人点赞
  • m1l哪个颜色

    不成熟的人表现是什么: ...

    922条评论 4225人喜欢 5486次阅读 393人点赞
  • ipad复制文件在哪里

    边境牧羊犬拉稀吃什么药: 这几天我家的边境牧羊犬一直拉稀 带点血 网上查了下 有可能是细小 有可能是肠胃炎但狗狗精神状态还不错 吃东西也正常 想先给它吃点泻药看看 狗狗的话应该给什么药吃比较好呢如果去医院检查细小的话在上海一般多少钱热心狗友:...

    796条评论 6065人喜欢 6641次阅读 821人点赞
  • 15码多少厘米

    准备规模养羊,请问,买哪一种狗来赶羊好呢?求助大神!: 那肯定是牧羊犬啦,德国牧羊犬,边境牧羊犬,这都可以啊! ...

    671条评论 1555人喜欢 2495次阅读 863人点赞
  • ece怎么用

    刚断奶的边牧幼犬吃什么好,喂养注意事项: 边牧幼犬狗粮,少食多餐,。温水泡湿狗粮,狗粮中加胡萝卜碎片。除了狗粮一个星期至少两个蛋黄,这样喂有营养 望采纳 ...

    444条评论 6134人喜欢 2342次阅读 879人点赞