深刻研究String str = new String("res"); 和 String str = "res";的区别

本文深入探讨了Java中String对象的两种创建方式:直接赋值与new关键字。详细解析了字符串常量池的使用及堆内存中对象的创建过程,帮助理解Java内存管理。

预备知识:

        1. new对象的过程;

        2. 堆和常量池;

1》, 先说 String str = "res"的创建过程 ;

        (过程: 加载类  -- > 初始化类 --> 创建对象  )

        创建一个对象str,将str指向常量池中的res

 

2》,String str = new String("res"); 

#include<iostream> using namespace std; class String { char* str; int len; public: String(char*n=nullptr):str(nullptr),len(0) { if(n){ str = new char[strlen(n) + 1]; strcpy(str, n); } len = strlen(str); } String(String& n) { if (n.str) { str = new char[strlen(n.str) +1]; strcpy(str, n.str); len = n.len; } else { str = nullptr; len = 0; } } ~String() { delete[]str; } void set(char* n) { if (n) { str = new char[strlen(n) + 1]; strcpy(str, n); len = strlen(n); } else { str = nullptr; len = 0; } } void show() { cout << *str<<endl; } int getlen() { return len; } void delchar(char n) { int b = 0; char* m = new char[getlen() + 1]; for (int a = 0;a < getlen();a++) { if (str[a] != n) { m[b] = str[a]; b++; } } m[b] = '\0'; delete[]str; str = new char[strlen(m) + 1]; strcpy(str, m); len = strlen(m); delete[]m; } String &operator-(char n) { delchar(n); return *this; } String& operator=(String& n) { if (n.str) { delete[]str; str = new char[n.getlen() + 1]; strcpy(str,n.str); len = n.len; } else { str = nullptr; len = 0; } return*this; } String& operator+=(String& n) { if (n.str&&str) { String m; m.str = new char[len + n.len + 1]; int a = 0; for (;a < len;a++) { m.str[a] = str[a]; } for (int b=0;a < len + n.len;a++,b++) { m.str[a] = n.str[b]; } delete[]str; str = new char[strlen(m.str) + 1]; strcpy(str, m.str); } return*this; } bool operator==( String& n) { if (strcmp(str, n.str)) { return false; } else { return true; } } friend String operator+(String&,String&); }; String operator+(String&n, String&m) { String res; res.str = new char[n.len + m.len + 1]; int a = 0; for (;a < n.len;a++) { res.str[a] =n. str[a]; } for (int b = 0;a < m.len + n.len;a++, b++) { res.str[a] = m.str[b]; } res.len = strlen(res.str); return res; }
03-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lm_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值