java-JAVA基础问题,请各位大神详细说下

问题描述

JAVA基础问题,请各位大神详细说下

这个为什么最后输出的是goodandgbc,为啥str没变,char变了呢?

解决方案

形参一般是不改变实参的值的,除非申明为引用,比如你传个int a进去,子函数内部相当于另外新建了一个int型变量b,然后使得b=a,之后的操作都是对于b而言的,a的值不会改变。但是如果你传的是的地址,你可以在子函数里改变这个地址所指向的对象的值。
像数组的传递,基本上就是把数组的首地址传递过去,所以在子函数对这个形参数组的操作会改变主函数里实参数组的值,因为它们指向的是同一个地址
可能说的有点乱,见谅~
如果有说错的地方还请其他大神指正~

解决方案二:

你可以试下把 change 函数中的 str = "test ok" 改为 this.str="test ok" 这样就好使了
原因是:
ex.str 是 一个引用 实际指向的 内存中的一个字符串对象, 通过change函数将它传递给 str 后, str = ex.str 实际上是str是另外一个引用
str它指向的对象和ex.str指向的对象相同
但是 如果你让 str="test ok" ,那 str实际指向的就是另外一个字符串对象了,而 ex.str 没变过。。

解决方案三:

String str1=new String("good"); String str2="abc";上面的情况可以这么理解吧。str1和str2的区别就在于,前者的str1在内存中有两个对象。后者的str2有一个对象。
前者的new的对象在堆内存中,类类型的对象s2在栈内存中。就像你说的str是类类型的对象,在栈内存中,指向的是堆内存中的那个。你方法中的赋值并没有改变具体的String值。事实上也是,字符串一旦被初始化,就不会被改变。

时间: 2024-11-03 22:19:44

java-JAVA基础问题,请各位大神详细说下的相关文章

代码-问一个JAVA的基础问题,希望大神们帮忙解惑。

问题描述 问一个JAVA的基础问题,希望大神们帮忙解惑. 有一段如下的代码,有几个疑惑: 1.定义了一个final的test1和一个static里面的test1,为什么定义2个test1不会有问题? 2.为什么在一个类中直接写static{ },这个是什么原理? 3.还有什么类似static{ }这样的写法?是什么原理? public class MyOwenTest{ public static final String test1 = "a"; static{ String tes

adb-[求救向] 请各位大神帮忙解决下吧,有关于安卓开发运行写好的项目的时候出现问题

问题描述 [求救向] 请各位大神帮忙解决下吧,有关于安卓开发运行写好的项目的时候出现问题 错误输出[2015-05-27 17:20:55 - Bluetooth] ------------------------------[2015-05-27 17:20:55 - Bluetooth] Android Launch![2015-05-27 17:20:55 - Bluetooth] The connection to adb is down and a severe error has o

javase-Java连接derby报错,求大神帮解决下~

问题描述 Java连接derby报错,求大神帮解决下~ 解决方案 http://tieba.baidu.com/p/1415330675 用SYS登录时不可以进行建表操作,看样子derby的确有权限控制存在.哼哼哼哼--- 另,用户名中不能存在字符,刚才在用户名中包含了一个;号,结果出现了 错误 58009:网络协议异常:在 DSS 链中的下一个 DSS 段与当前段具有相同的标识号.连接已终止.错误 08004:发生连接认证失败.原因:用户无权访问数据库. 这样的错误 解决方案二: http:/

在传智播客下了一个web项目,但是报错,请各位大神指教(初学java)

问题描述 在传智播客下了一个web项目,但是报错,请各位大神指教(初学java) log4j:WARN No appenders could be found for logger (com.mchange.v2.log.MLog). log4j:WARN Please initialize the log4j system properly. 2015-9-23 14:16:25 org.apache.catalina.core.StandardWrapperValve invoke 严重:

java-一个Java基础问题,求大神多指导

问题描述 一个Java基础问题,求大神多指导 ?class A { A(int i) { System.out.println("A"); } } class B extends A { B(int i) { // super(i); System.out.println("B"); } } public class Test { public static void main(String[] args) { new B(100); } } 解决方案 实例化子类B

请各位大神帮我用java编一下这个程序吧...我一点头绪都没有...

问题描述 请各位大神帮我用java编一下这个程序吧...我一点头绪都没有... 这道题的答案是:x=1.364746094 解决方案 http://wenku.baidu.com/link?url=wjIO2baxEfcSucwWaY_acszu0735F0QeyzjGf-Vrkr6R0xLvWnExVQSjPHb-4AX541nAiEoAaJGrH7V2aGTaoURkYFxRmydDCzkk5XcVgTShttp://download.csdn.net/detail/u012724893/8

java 面试题大全,求大神们帮助一下~~~~

问题描述 java 面试题大全,求大神们帮助一下~~~~ java 面试题大全,求大神们帮助一下~~~~java 面试题大全,求大神们帮助一下~~~~java 面试题大全,求大神们帮助一下~~~~java 面试题大全,求大神们帮助一下~~~~java 面试题大全,求大神们帮助一下~~~~java 面试题大全,求大神们帮助一下~~~~ 解决方案 求啥,百度上有的是,还带答案 解决方案二: http://pan.baidu.com/s/1kTxbjt9 百度文库 解决方案三: 同意楼上的,去百度上搜

java-请熟悉Java swing的大神帮忙看下这是什么控件

问题描述 请熟悉Java swing的大神帮忙看下这是什么控件 就是常见的这种提示框,Java有没有这种控件?叫什么名字? 解决方案 这是用JComponent的一个方法实现的,方法名为public void setToolTipText(String text) 例如我最近用给 JLabel添加提示语, 代码如下: JLabel lbl_setOutput = new JLabel(); ...... lbl_setOutput.setToolTipText("修改输出目录"); 效

java 此程序为啥有着这种结果呢?求大神们解释下。谢谢

问题描述 java 此程序为啥有着这种结果呢?求大神们解释下.谢谢 public class AccessProperty { static int i = 47; // 定义静态成员变量 public void call() { // 定义成员方法 System.out.println("调用call()方法"); for (i = 0; i < 3; i++) { System.out.print(i + " "); if (i == 2) { Syste