java赋值的基础问题
很多疑问呵呵,1为什么赋值inti然后i再=12可以呢,按理来说不应该非法么,声明i的时候不是直接得赋值么,或者在方法里才可以给i赋值?2为什么Stringq可以那么赋值...
很多疑问呵呵,
1为什么赋值int i然后i再=12可以呢,按理来说不应该非法么,声明i的时候不是直接得赋值么,或者在方法里才可以给i赋值?
2为什么String q可以那么赋值,下面注释掉的String s却不可以?他俩就是不在同一个类里边怎么就不行呢?
3String w = new String("opqrst");这句话按理来说,分析内存,String个w,那就是在stack中分配一个空间w,然后new了一个String类型的值opqrst在heap中,然后w“指向”它么,那打印w的时候应该是出哈希编码啊怎么出的还是opqrst呢?
自学不容易啊呵呵~~有没有交流的不吝赐教。
补充3,按理来说w是个引用啊,所以打出来应该是哈希编码啊。
4在class A中,如果String s = new String("aaaa");,那么打印s是出来哈希编码还是出来aaaa呢? 展开
1为什么赋值int i然后i再=12可以呢,按理来说不应该非法么,声明i的时候不是直接得赋值么,或者在方法里才可以给i赋值?
2为什么String q可以那么赋值,下面注释掉的String s却不可以?他俩就是不在同一个类里边怎么就不行呢?
3String w = new String("opqrst");这句话按理来说,分析内存,String个w,那就是在stack中分配一个空间w,然后new了一个String类型的值opqrst在heap中,然后w“指向”它么,那打印w的时候应该是出哈希编码啊怎么出的还是opqrst呢?
自学不容易啊呵呵~~有没有交流的不吝赐教。
补充3,按理来说w是个引用啊,所以打出来应该是哈希编码啊。
4在class A中,如果String s = new String("aaaa");,那么打印s是出来哈希编码还是出来aaaa呢? 展开
5个回答
展开全部
1、i是变量,不是常量,在方法里可以对变量进行操作。
2、在方法外,不能对变量进行操作,只能在声明的时候赋值。
3、调用System.out.println(String s);这个方法时,实际上是在括号里自动调用了Object.toString();方法,而String类继承于Object类,并重写了toString()方法,返回一个字符串,使之能打印出字符串的内容。你也可以自己写一个类,重写toString()方法,就可以直接打印输入这个类的对象的信息了。如果不重写,打印出来的就是这个对象的地址。
4、同3,打印出来是aaaa
2、在方法外,不能对变量进行操作,只能在声明的时候赋值。
3、调用System.out.println(String s);这个方法时,实际上是在括号里自动调用了Object.toString();方法,而String类继承于Object类,并重写了toString()方法,返回一个字符串,使之能打印出字符串的内容。你也可以自己写一个类,重写toString()方法,就可以直接打印输入这个类的对象的信息了。如果不重写,打印出来的就是这个对象的地址。
4、同3,打印出来是aaaa
追问
1没错,我是新人,竟然忘了对i操作是在main方法中了。
2确实,不能在方法外对变量进行操作,记住了。
3哦,原来是这么回事,自己查的API文档,确实重写了,所以输出是对象信息而不是地址了。
4明白。
非常感谢您,完全明白了。
展开全部
1. 每种类型的变量赋值时如果没有给其赋值,则其会得到该类型的默认值,如int的默认值是0,对象的默认值是null
2. 注释里的问题是,你在类型里声明对象是可以的,也就是说String s;这句话没有问题,但是你不应该在类的整体里写上s = "abcdefg",因为一个类里只应该是变量和方法
3. 这个问题我也不清楚,但是你不应该说W是引用,因为在JAVA中都是值传递,没有引用传递,但是感觉用处都一样,所有的String变量值都会放在String池中,可能在输出String变量值的时候会根据w的值在String池中查找对应的值吧,如果你想输出w的哈希码,可以用w.hashcode(),应该是这么写吧,记不清了
4. 打印出来的是aaaa
2. 注释里的问题是,你在类型里声明对象是可以的,也就是说String s;这句话没有问题,但是你不应该在类的整体里写上s = "abcdefg",因为一个类里只应该是变量和方法
3. 这个问题我也不清楚,但是你不应该说W是引用,因为在JAVA中都是值传递,没有引用传递,但是感觉用处都一样,所有的String变量值都会放在String池中,可能在输出String变量值的时候会根据w的值在String池中查找对应的值吧,如果你想输出w的哈希码,可以用w.hashcode(),应该是这么写吧,记不清了
4. 打印出来的是aaaa
追问
1单看这句话没问题,但是在main方法中仅int i然后打印i会出错,尚未初始化变量i
2恩,不可以在方法外对变量进行操作。
3哦,还有这个方法。
谢谢您的耐心回答
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我觉得你应该把书看全了啊,每件事说的都有,但是又都没在点子上
1 方法中的变量可以声明,可以赋值,可以声明赋值在一起,main就是方法不是么?还是你想说传参?
2 String很特殊,有许多特殊的处理,要好好看完书,因为就这点空间我也说不全,但是可以给你解释下你的问题。还是引用1main就是方法,你q是在方法中给赋值的当然没问题,但是s是个成员变量不是方法中的变量,换个名那叫属性,是不能这么分开写的,要么写成String s = “abcdefg”;要么写成String s;{s=“abcdefg”}虽然两个干了一件事,但是后者更有语义,好理解。也建议你查查书学习细节。
3有个朋友已经解释了,是toStirng()的问题,String类继承Object,重写了Object里的toString(),而sysout这种方法是输出对象toString()内容的,你可以自己写个类,重写toString()方法,然后输出,如果一个类没有重写toString(),结果就是输出了一个看不懂的地址,也不是什么哈希编码,那个是用hashcode()方法得到的
4 只要是String ,sysout就是字符串内容
1 方法中的变量可以声明,可以赋值,可以声明赋值在一起,main就是方法不是么?还是你想说传参?
2 String很特殊,有许多特殊的处理,要好好看完书,因为就这点空间我也说不全,但是可以给你解释下你的问题。还是引用1main就是方法,你q是在方法中给赋值的当然没问题,但是s是个成员变量不是方法中的变量,换个名那叫属性,是不能这么分开写的,要么写成String s = “abcdefg”;要么写成String s;{s=“abcdefg”}虽然两个干了一件事,但是后者更有语义,好理解。也建议你查查书学习细节。
3有个朋友已经解释了,是toStirng()的问题,String类继承Object,重写了Object里的toString(),而sysout这种方法是输出对象toString()内容的,你可以自己写个类,重写toString()方法,然后输出,如果一个类没有重写toString(),结果就是输出了一个看不懂的地址,也不是什么哈希编码,那个是用hashcode()方法得到的
4 只要是String ,sysout就是字符串内容
追问
我就一小白,您也别生气,听你说的我又明白很多,多谢指教。就两个问题,1个是对成员变量的操作只能放在方法中,2个是String toString()这个方法。
另外我想说一点 如果没重写toString,object 默认输出的是 类名@+哈希码值。这个API文档里有写,并不是你说的“也不是什么哈希码”
追答
对成员变量的操作只能放在方法中,你是提问还是肯定的说?
除了方法还有种东西叫代码块 我给的例子是写在代码块中的(你可以自己照着写验证)
查API是好习惯 如果你来问,证明API也有不能解决的问题的时候 虚心一点总是好的
如果是我看API不细心的话 我会说明给你道个歉 这都不是事
正如你说的那是类名+16进制的哈希码,我想你说的只是哈希码所以多说了一句,如果得到哈希码就是hashcode()这个没有问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1,先声明的时候 i 会初始化为0,后面讲12赋值给 i ,则12会把0覆盖掉,那么此时 i 的值就为12;
2, java中规定了只能在方法中写语句,在类体里面不可以写,s="sdfsdf";是赋值语句了
3,打印的是引用w所指向的内容哈希吗是为了引用能够找到那个字符串,好像一个地址一样
4,试试就知道了,还是aaaa
2, java中规定了只能在方法中写语句,在类体里面不可以写,s="sdfsdf";是赋值语句了
3,打印的是引用w所指向的内容哈希吗是为了引用能够找到那个字符串,好像一个地址一样
4,试试就知道了,还是aaaa
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1:int i 你只是声明变量了,但是没有给定初始值。这个 i 不是常量,不需要声明的时候就给定初始值。你当然也可以写成 int i =12;
2:下面注视掉的string已经跑出了你的这个类保护的范围了,你试着把它放到粗线条的卡号内。
3:它只是显示会对应的key<-->value的样子,你的key对应的是value。会打印对饮的value,而不是key
2:下面注视掉的string已经跑出了你的这个类保护的范围了,你试着把它放到粗线条的卡号内。
3:它只是显示会对应的key<-->value的样子,你的key对应的是value。会打印对饮的value,而不是key
追问
1理解了,确实。
2确切说是注释掉的String已经跑出 方法 的保护范围了。
3不明白。
非常感谢您的回答。我知道答案了谢谢你。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询