首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

String s="a" 和 String s=new String("a"); 这两个的区别是什么?解决思路

2012-01-09 
String sa 和 String snew String(a) 这两个的区别是什么?String str1abc 和 String str1new S

String s="a" 和 String s=new String("a"); 这两个的区别是什么?
String str1="abc" 和 String str1=new String("abc"); 这两个的区别是什么?
麻烦高手说一下

[解决办法]
前者在编译的时候就将"abc"放在栈区的字符串常量池当中,并利用str1这个引用指向到这个字符串常量的引用,而后者是在运行的时候,在堆区创建一个字符串对象"abc"并利用str1指向这个对象获得引用,因此两个str1的引用指向的内存地址不同,而逻辑上str1输出的内容相同
[解决办法]
怎么老是有人问这个问题
String str1="abc" 
str1是栈内变量,它的内存保存的是常量池的常量字符串对象对象"abc"的地址

String str1=new String("abc");
str1是栈内变量,它的内存保存的是堆中的new String对象的地址,new String在堆中生成对象,并用常量池的字符串对象"abc"初始化堆中的对象,所以堆中的对象的内存的内容和常量池对象的内存的内容一样,但是是不同的两个对象

 
[解决办法]
String str1=new String("abc");
两个对象,一个是“xyx”,一个是指向“xyx”的引用对象str1。

[解决办法]
这个看起来比较容易明白

探讨

http://www.blogjava.net/hxlistiancai/articles/335979.html

[解决办法]
结贴发代码
Java code
import java.awt.Color;import java.awt.Graphics;/** * 使用Singleton pattern * @author xKF55811 * */public class Chessman {    //定义2种棋子,new Chessman(1)为黑子,new Chessman(2)为白子    private static Chessman[] chessmanes = new Chessman[]{new Chessman(1),new Chessman(2)};    //棋子宽度    private static int width;    //棋子长度    private static int height;    //棋子类型(黑子或白子)表示    private int belong;        /**     * 获取棋子宽度     * @return 棋子宽度     */    public static int getWidth() {        return width;    }    /**     * 设置棋子宽度     * @param _width 棋子宽度     */    public static void setWidth(int _width) {        width = _width;    }        /**     * 获取棋子高度     * @return 棋子高度     */    public static int getHeight() {        return height;    }        /**     * 设置棋子高度     * @param _height 棋子高度     */    public static void setHeight(int _height) {        height = _height;    }        /**     * 设置棋子大小     * @param _width 棋子宽度     * @param _height 棋子长度     */    public static void setSize(int _width, int _height)    {        width = _width;        height = _height;    }        //构造函数,设置标识    private Chessman(int belong)    {        this.belong = belong;    }        /**     * 获取棋子标识     * @return 棋子标识     */    public int getBelong()    {        return belong;    }        /**     * 获取棋子     * @param belong 棋子类型标识     * @return 对应的棋子     */    public synchronized static Chessman getChessman(int belong)    {        if(belong==1)        {            return chessmanes[0];        }        else if(belong==2)        {            return chessmanes[1];         }        return null;    }        /**     * 根据坐标绘制棋子     * @param g 画布     * @param locationX 横坐标     * @param locationY 纵坐标     */    public void paint(Graphics g,int locationX,int locationY)    {        g.drawOval(locationX, locationY, width, height);        if(belong==1)        {            g.setColor(Color.white);        }        g.fillOval(locationX, locationY, width, height);    }    }
[解决办法]
import java.awt.Graphics;

import javax.swing.JFrame;


public class ChessBoard extends JFrame {

/**

*/
//棋子数组
private Chessman[][] chessmanes;
//棋盘行数
private int rowCount;
//棋盘列数
private int colCount;
//棋格宽度
private int boxWidth = 50;
//棋格高度
private int boxHeight = 50;

private static final long serialVersionUID = 1L;

/**
* 设置棋格和棋子宽度
* @param width 棋格宽度


*/
public void setBoxWidht(int width)
{
boxWidth = width;

//设置棋子宽度
Chessman.setWidth(width);
}

/**
* 设置棋格和棋子高度
* @param height 棋格高度
*/
public void setBoxHeight(int height)
{
boxHeight = height;
//设置棋子高度
Chessman.setHeight(height);
}

/**
* 根据参数初始化棋盘行列数
* @param rowCount 棋盘行数
* @param colCount 棋盘列数
*/
private ChessBoard(int rowCount,int colCount)
{
this.rowCount = rowCount;
this.colCount = colCount;

//初始化棋盘
init();
}

/**
* 设置棋格和棋子大小
*/
public void setBoxSize(int boxWidth,int boxHeight)
{
this.boxWidth = boxWidth;
this.boxHeight = boxHeight;

//设置棋子大小
Chessman.setSize(boxWidth, boxHeight);

////重置棋盘大小
//this.setSize(colCount*boxWidth,rowCount*boxHeight+boxHeight/2);
}

/**
* 设置棋盘大小
*/
public void setSize(int width,int height)
{
super.setSize(width, height);

//重置棋格大小
setBoxSize(width/colCount, (int)((height*2.0f)/(rowCount*2+1)));
}

/**
* 初始化棋盘
*/
@SuppressWarnings("deprecation")
public void init()
{
//初始化棋子矩阵
chessmanes = new Chessman[rowCount][colCount];

//设置棋盘大小
this.setSize(colCount*boxWidth,rowCount*boxHeight+boxHeight/2);

//多余代码
show();


//重绘棋盘
repaint();
}

/**
* 棋盘绘制
*/
public void paint(Graphics g)
{
//绘制横线
for(int i=0;i<rowCount;i++)
{
int y = i*boxHeight+boxHeight/2;
g.drawLine(0, y, getWidth(), y);
}

//绘制纵线
for(int i=0;i<colCount;i++)
{
int x = i*boxWidth+boxWidth;
g.drawLine(x, 0, x, getHeight());
}

//绘制棋子
for(int i=0;i<rowCount;i++)
{
for(int j=0;j<colCount;j++)
{
if(chessmanes[i][j]!=null)
{
chessmanes[i][j].paint(g,j*boxWidth+boxWidth/2,(i+1)*boxHeight);
}
}
}
}


[解决办法]
http://blog.csdn.net/xiazdong/article/details/6723101
我这里面有图解。

热点排行