怎样实现一个String类?

IT小小白 2015-08-20 03:59:36
加精
用String类的时候发现可以直接String str = "";我也想实现一下,但是每次都得new或者调用方法创建对象,TestString s = new TestString() 没办法TestString s= "";求指教,这个改怎样实现啊?看了String的源代码,还是完全不懂。
...全文
4212 53 打赏 收藏 转发到动态 举报
写回复
用AI写文章
53 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_42907161 2019-04-06
  • 打赏
  • 举报
回复
看评论让我想起了编译原理,这应该是语法分析吧
mr_foxsand 2019-04-05
  • 打赏
  • 举报
回复
我思考了大约5分钟,估计也就通过静态方法可以实现楼主的需求。
qq_39936465 2019-04-05
  • 打赏
  • 举报
回复
引用 47 楼 IT小小白 的回复:
谢谢大家了,是我想多了。
不是不能实现,就是比你想的要复杂很多,如果实现了就相当于诞生了第9个基本类型,需要修改编译器的识别方式,希望你有一天能实现该方法。
kiqi_20200617 2019-04-04
  • 打赏
  • 举报
回复
这是编译器给String开的后门。。。
咖啡牛奶糖 2017-09-16
  • 打赏
  • 举报
回复
现行的虚拟机无法做到。 自定义的类,想要创建实例,基本都要用到new。String类不是基本数据类型,却有与基本数据类型一样的创建方式,这种方式首先在编译期,由编译器让这种方式通过编译,运行期由虚拟机来解释行为,所以想要创建类似String类的自定义类,首先要让编译器通过,其次让虚拟机可以识别。故而,需要改变的不是如何定义这样一个类,而是如何解释这个类,而解释的工作不在上层做。
丶2p 2017-08-03
  • 打赏
  • 举报
回复
11楼,结帖
ImAmelie 2017-07-28
  • 打赏
  • 举报
回复
真的学习了,感谢楼主提问
宾灬 2017-07-28
  • 打赏
  • 举报
回复
java虚拟机就这么规定的,这么写jvm就认识,你要自己弄一个,jvm认吗。c语言中字符串的本质就是字符数组。
窝 窝 2017-07-25
  • 打赏
  • 举报
回复
不带这种操作的吧。。。
IT小小白 2015-11-26
  • 打赏
  • 举报
回复
谢谢大家了,是我想多了。
敌敌畏耶 2015-10-17
  • 打赏
  • 举报
回复
对象只能new···
业余搬砖01 2015-10-17
  • 打赏
  • 举报
回复
http://www.cnblogs.com/xiaoxuetu/archive/2013/06/05/3118229.html
小灰狼 2015-10-16
  • 打赏
  • 举报
回复
引用 38 楼 shijing266 的回复:
[quote=引用 21 楼 iloveyousunna 的回复:] 人家提的问题怎么就没有意义了,楼主是想说自己实现一个TestString类,谁说一定要继承String类了,可以不继承呀。楼主支持你,你可以去看一下String类的源码,实质上就是一个字符数组,在对数组进行各种操作,如果你自己实现了,肯定对你理解String类有帮助。
这话说的好,这个问题也问的好,一直在使用,根本没深究过,为什么String可以直接用=""来声明和赋值,其他的就需要new obj()来实现[/quote] 编译器设计者决定的,编译器说这样行,那就行,他说不行,你行也不行
wang_pc_10 2015-10-16
  • 打赏
  • 举报
回复
String str = "ABC" // 在java里面, “ABC”本身就是一个String对象 。所以这里相当于的意思是str引用对象"ABC" 所以你要重新定义一个类实现整个功能的话,TestString s= " XXX",你得使编译器能将"XXX"当做是一个TestString的对象。 个人看法,不对勿喷。。。。。。。。
cattpon 2015-10-16
  • 打赏
  • 举报
回复
learning~
  • 打赏
  • 举报
回复
引用 21 楼 iloveyousunna 的回复:
人家提的问题怎么就没有意义了,楼主是想说自己实现一个TestString类,谁说一定要继承String类了,可以不继承呀。楼主支持你,你可以去看一下String类的源码,实质上就是一个字符数组,在对数组进行各种操作,如果你自己实现了,肯定对你理解String类有帮助。
这话说的好,这个问题也问的好,一直在使用,根本没深究过,为什么String可以直接用=""来声明和赋值,其他的就需要new obj()来实现
w543705344 2015-10-15
  • 打赏
  • 举报
回复
引用 25 楼 hemowolf 的回复:
[quote=引用 23 楼 xmt1139057136 的回复:] 看了这么多评论,发现好多评论都回答偏离主题了。 楼主是想写一个类,这个类类似string类。而不是去继承String类。 String类是一个字符串相关的类。由java规范好了。为引用数据类型。这是一个特殊的类。 String a =""; 这其实是java的机制帮我们省去了new关键字。它等于String a = new String("");
不要误导初学者 String a = ""; 和 String a = new String(""); 的效果并不相同。 前者是在编译时期确定一个字符串对象,在实际运行时,JVM会在内存的常量池中创建对象,然后所有的编译期可确定内容的字符串,只要是内容相同的,就全部指向同一个对象,以节省内存;而后者,是在运行时创建一个对象。 you can test: String a = ""; String b = ""; String x = new String(""); String y = new String(""); System.out.println(a == b); System.out.println(x == y); System.out.println(a == x);[/quote] 嗯 那应该是相当于 “”是 String t=new String(""); String a =t; String b =t; String x = new String(""); String y = new String(""); 是吧 奇怪的编译。。。不过节省了空间
xiaoxiangqing 2015-10-15
  • 打赏
  • 举报
回复
可以参考系统的,毕竟功能太多
qq_32024053 2015-10-15
  • 打赏
  • 举报
回复
学习了,真心感谢!我也得努力!
kandytanaiai 2015-10-15
  • 打赏
  • 举报
回复
这是String特定语法
加载更多回复(33)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧