请教JAVA中的参数赋值问题

wizarder 2003-11-28 10:06:11
/*************************** 1 *****************************/
class Content
{
String a;
String b;
}

class Ass
{
pubic void func(Content c)
{
c.a = "aaa";
c.b = "bbb";
}
}

/*************************** 2 *****************************/

class Ass
{
String n = new String("");

pubic void func(String c)
{
c = "aaa";
}
}

为什么代码1里传进的参数可以赋值,而代码2里的参数不能赋值啊?
...全文
166 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fbysss 2003-12-09
  • 打赏
  • 举报
回复
同意楼上的说法
aaassd 2003-11-29
  • 打赏
  • 举报
回复
import java.awt.*;
import java.awt.event.*;
import java.awt.print.*;
import java.awt.datatransfer.*;
import java.io.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import javax.swing.text.PlainDocument;
import com.jnotepad.inster.*;
import java.awt.event.ActionEvent;
import com.jnotepad.format.*;
import javax.swing.JMenu;
import com.jnotepad.view.*;


// 定义主类
public class JNotepad extends JPanel
{
// 定义一个菜单条
JMenuBar jmb = new JMenuBar();
//定义文件菜单
JMenu file = new JMenu("文件");
// 定义编译菜单
JMenu edit = new JMenu("编辑");
// 定义 帮助菜单
JMenu help = new JMenu("帮助");
// 定义 插入菜单
JMenu inster= new JMenu("插入");
// 定义格式 菜单
JMenu format = new JMenu("格式");
// 定义工具菜单
JMenu tools =new JMenu("工具");
// 定义表格菜单
JMenu form =new JMenu("表格");
// 定义窗口菜单
JMenu window = new JMenu("窗口");
// 定义 视图菜单
JMenu view = new JMenu("视图");
// 定义 工具条
JToolBar toolBar = new JToolBar();
// 定义菜单项
JMenuItem jmi;
JMenu jm;



// 给菜单中添加拷贝菜单项
edit.add(jmi = new JMenuItem("拷贝", KeyEvent.VK_C));
//菜单项事件注册
jmi.addActionListener(new copyL());
// 给菜单中添加剪切菜单项
edit.add(jmi = new JMenuItem("剪切", KeyEvent.VK_T));
//菜单项事件注册
jmi.addActionListener(new cutL());
// 给菜单中添加粘贴菜单项
edit.add(jmi = new JMenuItem("粘贴", KeyEvent.VK_P));
//菜单项事件注册
jmi.addActionListener(new pasteL());
// 给菜单中添加删除菜单项
edit.add(jmi = new JMenuItem("删除", KeyEvent.VK_D));
//菜单项事件注册
jmi.addActionListener(new deleteL());
// 在菜单中添加一条分隔线
edit.addSeparator();
// 给菜单中添加全选菜单项
edit.add(jmi = new JMenuItem("全选", KeyEvent.VK_A));
//菜单项事件注册
jmi.addActionListener(new selectAllL());

// 给菜单中添加帮助主题菜单项
help.add(jmi = new JMenuItem("帮助主题", KeyEvent.VK_A));
//菜单项事件注册
jmi.addActionListener(new aboutL());

// 添加布局管理(使用边界布局)
setLayout(new BorderLayout());

file.setMnemonic(KeyEvent.VK_F);
jmb.add(file);
edit.setMnemonic(KeyEvent.VK_E);
jmb.add(edit);
view.setMnemonic(KeyEvent.VK_V);
jmb.add(view);
view.add(jmi=new JMenuItem("普通(N)")) ;
view.add(jmi=new JMenuItem("Web版式(W)")) ;
jmi.setIcon(new ImageIcon(
getClass().getResource("Image7.gif"))) ;
view.add(jmi=new JMenuItem("页面")) ;
view.add(jmi=new JMenuItem("大纲")) ;
view.addSeparator();
view.add(jmi=new JMenuItem("任务窗格")) ;
view.add(jmi=new JMenuItem("工具栏")) ;
view.add(jmi=new JMenuItem("标尺")) ;
view.add(jmi=new JMenuItem("显示段落标记")) ;
view.add(jmi=new JMenuItem("网格线")) ;
view.addSeparator();
view.add(jmi=new JMenuItem("文档结构图")) ;
view.add(jmi=new JMenuItem("页眉和页脚")) ;
view.add(jmi=new JMenuItem("脚注")) ;
jmi.setEnabled(false) ;
view.add(jmi=new JMenuItem("标记")) ;
view.addSeparator();
view.add(jmi=new JMenuItem("显示全屏")) ;
view.add(jmi=new JMenuItem("显示比例...")) ;

jmb.add(inster);
inster.add(jmi=new JMenuItem("分隔符……",'i'));
inster.add(jmi=new JMenuItem("页码……"));
inster.add(jmi=new JMenuItem("日期与时间"));
inster.add(jmi=new JMenuItem("域..."));
inster.add(jmi=new JMenuItem("符号..."));
inster.add(jmi=new JMenuItem("批注"));
inster.addSeparator();
inster.add(jmi=new JMenuItem("数字..."));
inster.add(jmi=new JMenuItem("引用"));
inster.add(jmi=new JMenuItem("Web组件"));
jmi.setEnabled(false) ;
inster.addSeparator();
inster.add(jm=new JMenu("图片"));
jm.add(jmi=new JMenuItem("剪贴画"));
jm.add(jmi=new JMenuItem("来自文件"));
jm.add(jmi=new JMenuItem("自选图形"));
jm.add(jmi=new JMenuItem("艺术字"));
jm.add(jmi=new JMenuItem("图表"));
inster.add(jmi=new JMenuItem("图示(G)..."));
inster.add(jm=new JMenu("文本框"));
jm.add(jmi=new JMenuItem("横排"));
jm.add(jmi=new JMenuItem("竖排"));
inster.add(jmi=new JMenuItem("文件..."));
inster.add(jmi=new JMenuItem("对象..."));


inster.add(jmi=new JMenuItem("书签..."));
inster.add(jmi=new JMenuItem("超连接"));

jmb.add(format);
format.add(jmi=new JMenuItem("字体(F)...")) ;
jmi.setIcon(new ImageIcon(
getClass().getResource("Image00011.gif"))) ;
format.add(jmi=new JMenuItem("段落(P)...")) ;

format.add(jmi=new JMenuItem("项目符号和编号(N)...")) ;
format.add(jmi=new JMenuItem("边框和底纹(B)...")) ;
format.addSeparator();
format.add(jmi=new JMenuItem("分栏(C)...")) ;
format.add(jmi=new JMenuItem("制表位(T)...")) ;

format.add(jmi=new JMenuItem("首字下沉(D)...")) ;
jmi.setEnabled(false) ;
format.add(jmi=new JMenuItem("文字方向(X)...")) ;
format.add(jmi=new JMenuItem("更改大小写(E)...")) ;

format.addSeparator();
format.add(jmi=new JMenuItem("调整宽度(I)...")) ;
jmi.setEnabled(false) ;
format.add(jm= new JMenu("中文版式(L)")) ;
format.addSeparator();
format.add(jm=new JMenu("背景(K)")) ;
format.add(jmi=new JMenuItem("主题(H)...")) ;
format.add(jm=new JMenu("框架(R)")) ;
format.add(jmi=new JMenuItem("自动套用格式(A)...")) ;
format.add(jmi=new JMenuItem("样式和格式(S)...")) ;
format.add(jmi=new JMenuItem("显示格式(V)...")) ;
format.addSeparator();
format.add(jmi=new JMenuItem("对象(O)...")) ;
jmi.setEnabled(false) ;
jmb.add(Box.createHorizontalGlue());
help.setMnemonic(KeyEvent.VK_H);
jmb.add(help);

// 使用边界布局北边添加菜单条
add(jmb, BorderLayout.NORTH);
// 使用边界布局中心添加工具条
add(toolBar, BorderLayout.CENTER);
// 使用边界布局南边添加封装滚动窗口
add(jsp, BorderLayout.SOUTH);
// 给文本区添加可以看的见的符号
jta.getCaret().setVisible(true);
// 符号的位置
jta.setCaretPosition(0);
}
//**************************************************************************************
// main 主函数



protected static final class appCloseL extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
}
有什么问题?
谁都说JAVA是BY VALUE的,因为这是事实,thinking in java中有
YuLimin 2003-11-29
  • 打赏
  • 举报
回复
Java是by value形式来进行参数传递的。
xujinglei 2003-11-29
  • 打赏
  • 举报
回复
不会出问题啊!谁说JAVA是BY VALUE的,简直是胡说啊!那克隆方法是干吗用的,如果是BY VALUE它不是毫无用武之地吗!
fantasyCoder 2003-11-29
  • 打赏
  • 举报
回复
它们是两个不同的概念
yangfasheng 2003-11-29
  • 打赏
  • 举报
回复
第一句有误,
楼主把这两个混淆了,在第一个Ass类中,你的值不是赋给参数c,而是赋给类Content
中是两个域(或称成员数据)a,b
而在第二个类中,你却要给实参赋值:c="aaa";这在任何一门高级语言中都是不可以的.
即使是传址也是不行的,在传址过程中你修改的是参数所指向的地址空间的值,
而不是参数值.
yangfasheng 2003-11-29
  • 打赏
  • 举报
回复
楼主把这两个混淆了,在第一个Ass类中,得到参数值的不是c,而是类Content
中是两个域(或称成员数据)a,b
而在第二个类中,你实参赋值c="aaa";这在任何一门高级语言中都是不可以的.
即使是传址也是不行的,在传址过程中你修改的是参数所指向的地址空间的值,
而不是参数值.
才钦 2003-11-29
  • 打赏
  • 举报
回复
基本类型是值传递,对象是址传递
wxh512 2003-11-28
  • 打赏
  • 举报
回复
它们是两个不同的概念
第二个c是方法传进来的值
第一个是什么呀
他是一个租得值
你付给了c.a等

62,614

社区成员

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

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