java中程序输出为什么是good and gbc 而不是test ok and gbc

java中程序输出为什么是good and gbc 而不是test ok and gbc,第1张

public class Example{ // 我来分析一下内存分配情况吧!

String str= new String("good");

//String str 时,把str引用放在栈空间,值为null , 当new String 时 ,在堆空间生成一个 good ,并且Str指向它!

char[]ch={'a','b','c'};

//char[]ch 时,把ch 引用放在栈空间,在堆空间生成一个数组 a,b,c 并且ch 指向它们

public static void main(String args[]){

Example ex=new Example();

//Example ex 时,把 ex 引用放在栈空间, 当new Example 时 ,

//在堆空间生成一个对象 并且 ex 指向它 ,没有任何属性值,因为你没有写构造函数

exchange(exstr,exch);

// 调用 方法 ,看方法分析!

Systemoutprint(exstr+"and");

Systemoutprint(exch);}

public void change(String str,char ch[]){

// 可能这里你会误会 ,这里的str 不同于 外面的 str ,

// 这里的意思是, String str 在栈空间 '新建' 一个str , 其实那里已有一个 str ,就是上面那个

// 他们两个并不一样 ,这个str 是局部变量,依赖于方法 , 只要方法结束,它就自动消亡,而外面那个还在,

// 所以这里就是 ,把外面的 str 传进来,把值赋给 这个 str ,此时两个都是 ''good''

// 而char [] 分析则不同 ,

// 请先 记住 ,ch [0],ch[1] ,ch[2] 都是存在堆空间的 ,即是他们的地址空间,

// 对于这种引用类型的变量(例如数组,对象),他们其实是把传进来的值直接放在引用地址

// 即 ch[0] 始终只有一 个,并且指向堆空间,参数传进来也是在堆空间里面。

str="test ok";

// 然后执行这一步时 , 这里面的str值就变化了 ,即变为 test ok , 请记住此时在栈空间是有两个 str 哦

// 外面依然是 good , 可里面的 变成 test ok , 好的 ,继续

ch[0]='g';

// 据上面分析,很显然 , ch[0] 始终是一个 ,并且存放和修改都是直接在堆空间, 所以这里ch[0]变成 'g'

} // 好,这个方法终于运行结束 , 重点来了, 到这里 谁 死掉了 , 就是这里面那个 依赖于方法存在的局部变量 str

// 那么现在一共就只有一个 str ,并且它的值为 good ,当接下去控制台输出的时候调用 str ,

// 你说还会调用那个死了的 str 吗, 显然 调用 还存在的 str 即是 good

}

// 其实 , 假如想看明白,你可以这样 , 把方法里面的 str , 改为 thisstr

// 你就能够区分 : 原来他们真是 两个 str ,而使用 this (本类) 调用的才是成员变量!

// 不依赖方法 ,就是命硬 , 死不了 !

// 这样分析, 你懂了吗 ?

#include<stdioh>

int main()

{

int num;

printf("Plaese Input: ");

scanf("%d",&num);

switch(num)

{

case 1:

printf("excellent\n");

break;

case 2:

printf("good\n");

break;

case 3:

printf("pass\n");

break;

case 4:

printf("fail\n");

break;

default:

break;

}

return 0;

}

还是:goodgood

逐行解释一下

字符数组s保存了"goodgood",指针sp指向s[0]的地址

然后sp指向s[2]的地址

然后sp指向"to"字符串的首地址,注意并没有改变s,因此s仍然是"goodgood"

sp="to";

这里的"to"是一个字符串常量,就跟int类型常量是一样的(比如写一个100),上面那句话的意思是sp指向"to"这个字符串常量的地址。

也就是说sp先指向数组s的地址,后面又变更成字符串常量"to"的地址。数组s没有发生变化,所以还是打印goodgood!了。

直接给数码管送值就行,就是一个动态显示数字的程序将数据改为good与erro的值,不过前面肯定要加一个判断,首先一直键盘扫描,无键按下继续循环扫描,有键按下,进入显示子程序。盘断是什么键,是正确的键就将good的值赋给数组并调显示块

以上就是关于java中程序输出为什么是good and gbc 而不是test ok and gbc全部的内容,包括:java中程序输出为什么是good and gbc 而不是test ok and gbc、c语言,编写程序,输入1、2、3、4,分别显示excellent、good、pass、fail。、C语言的问题 求大神等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10211474.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存